数字排列(等差数列计算)

来源:互联网 发布:阿里布达年代祭百度云 编辑:程序博客网 时间:2024/05/19 20:01

【问题描述】

观察下列数字的排列规律。

问题:给你一个正整数n,输出n所在的行x和列y。

其中数字排列方式如图所示:

【输入】

一个正整数n

【输出】

n所在的行x和所在的列y,x和y之间用一个空格隔开。

【样例输入输出】

c.inc.out9
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文件中。

0 0