您的位置:首页 > 其它

UVA - 10161 Ant on a Chessboard

2014-10-05 23:23 447 查看
题目大意:给出数字,求该数字在矩阵中的位置

解体思路:蛋疼的规律找到就可以,对角线是以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);
					else
						printf("%d %d\n",i+1,i+1+move);
				else
					if(move >= 0) 
						printf("%d %d\n",i+1,i+1-move);
					else
						printf("%d %d\n",i+1+move,i+1);
				break;
			}	
		}
	}
	return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: