从对角线上入手 比如 con[i+1][i+1]=con[i][i]+2i;
接着每个要找的数字要和对角线元素两两对比夹在大小之间,接着再根据奇偶判断位置
敲的时候发现很多bug 最后被空格换行弄得一直ac不了 我去啊
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int con[10500][10500];
int main(){
memset(con, 0, sizeof(con));
con[0][0] = 1;
for (int i = 0,j=1; i < 1050; i++,j++){
con[i + 1][i + 1] = con[i][i] + 2 * j;
}
int n;
while (cin >> n){
if (n == 0) break;
for (int i = 0; i < 1050; i++){
if (con[i][i] < n && con[i + 1][i + 1] >= n){
if (i % 2 == 0){
int k = n - con[i][i];
if (k>i)
printf("%d %d\n", k-i, i + 2 );
else
printf("%d %d\n", i + 1 - k, 1 + i);
}
else {
int k = n - con[i][i];
if (k > i)
printf("%d %d\n", i + 2, k - i);
else
printf("%d %d\n", i + 1, i + 1 - k);
}
}
}
}
return 0;
}