【問題描述】
觀察下列數字的排列規律。
問題:給你一個正整數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文件中。