UVA - 10161 Ant on a Chessboard

来源:互联网 发布:英伟达10系列显卡知乎 编辑:程序博客网 时间:2024/06/05 03:24

题目大意:给出数字,求该数字在矩阵中的位置

解体思路:蛋疼的规律找到就可以,对角线是以1为开头,后面公差为2的等差数列的和

#include<cstdio>int main() {//int n, x, y, number;//scanf("%d", &n);//int a[100][100];/*for(int i = 0, j = n -1; j >= 0; j--,i++) {number = 1 + (j + 1) * j;a[i][j] = number;if(j % 2 == 0) {int add = 1;int fu = -1;for( y = j - 1; y >= 0; y--) {a[i][y]=  number + add;add++;}for( x = i + 1; x < n; x++) {a[x][j] = number + fu;fu--;}}else{int add = 1;int fu = -1;for(y = j - 1; y >= 0; y--){a[i][y] = number + fu;fu--;}for(x = i + 1; x < n; x++) {a[x][j] = number + add;add++;}}}for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++)printf("%d\t",a[i][j]);printf("\n");}*/int num;int number;while(scanf("%d", &num) != EOF && num) {for(int i = 0; ;i++) {number = 1 + (i + 1) * i;if(number - i <= num && num <= number + i)  {int move = num - number;//printf("move is %d\t i is %d\n", move, i);if( i % 2 == 0)if(move >= 0)printf("%d %d\n",i+1-move,i+1);elseprintf("%d %d\n",i+1,i+1+move);elseif(move >= 0) printf("%d %d\n",i+1,i+1-move);elseprintf("%d %d\n",i+1+move,i+1);break;}}}return 0;}


0 0
原创粉丝点击