【问题描述】
观察下列数字的排列规律。
问题:给你一个正整数n,输出n所在的行x和列y。
其中数字排列方式如图所示:
【输入】
一个正整数n
【输出】
n所在的行x和所在的列y,x和y之间用一个空格隔开。
【样例输入输出】
c.in | c.out |
9 | 3 2 |
【数据范围】
50%的数据,n<=1 000 000;
100%的数据,n<=1 000 000 000。
代码实现:
#include <stdio.h>
int main(){
int i,x=1,y=1;
long int sum,s;
freopen("c.in","r",stdin);
scanf("%d",&s);
i=1;sum=1;
while(sum<s){ //计算等差数列,并于输入进行比较
i++;
sum=sum+i;
}
if(i%2==0){ //根据i是否为偶数(由图可得i为基数和偶数时数字的增长方向刚好相反)
y=sum-s+1;
x=i-sum+s;
}else{
y=i-sum+s;
x=sum-s+1;
}
freopen("c.out","w",stdout);
printf("%d %d\n",x,y);
return 0;
}
注意:需要在工程文件夹下建立c.in用于读取输入数据,代码运行后输出结果不再控制台显示,而是存储到工程文件夹下的c.out文件中。