棋盘问题
时间限制: 1000 ms | 内存限制: 65536 KB
- 描述
-
输入三个自然数n,i,j(1<=i<=n,1<=j<=n).n表示有一个n行n列的棋盘格子,(i,j)表示棋盘中格子的位置 如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:
(2,3)表示该格为第2行第3列
要求编制一个程序,根据输入的n,i,j的值,输出与格子(i,j)在同一行、同一列、同一对角线上的所有格子位置,例如:当n=4,i=2,j=3时,输出的结果是: (2,1)(2,2)(2,3)(2,4) {同一行格子的位置} (1,3)(2,3)(3,3)(4,3) {同一列格子的位置} (1,2)(2,3)(3,4) {左上到右下对角线上的格子位置} (4,1)(3,2)(2,3)(1,4) {左下到右上对角线上的格子位置}
- 输入
-
包含多组数据, n=? i=? j=? 每个数一行 以n=0结束
输出 -
根据输入的n,i,j的值,输出与格子(i,j)在同一行、同一列、同一对角线上的所有格子位置 每组测试数据输入四行,分别是: {同一行格子的位置} {同一列格子的位置} {左上到右下对角线上的格子位置} {左下到右上对角线上的格子位置}
每个位置用一个半角小括号括起来,相邻的位置之间没有别的字符
样例输入 -
n=4i=2j=3
样例输出 -
(2,1)(2,2)(2,3)(2,4)(1,3)(2,3)(3,3)(4,3)(1,2)(2,3)(3,4)(4,1)(3,2)(2,3)(1,4)
View Code1 #include
2 #include 3 #include 4 5 int main() 6 { 7 int i; 8 int j; 9 int a, b; 10 int c; 11 int array[10][3]; 12 13 memset(array, 0, sizeof(array)); 14 i = 0; 15 while (1) 16 { 17 scanf ("n=%d", &array[i][0]); 18 while (c = getchar() != '\n' && c != EOF); 19 // setbuf(stdin, NULL); 20 // fflush(stdin); 21 22 if (array[i][0] == 0) 23 break; 24 25 scanf ("i=%d", &array[i][1]); 26 while (c = getchar() != '\n' && c != EOF); 27 // setbuf(stdin, NULL); 28 // fflush(stdin); 29 30 scanf ("j=%d", &array[i++][2]); 31 while (c = getchar() != '\n' && c != EOF); 32 // setbuf(stdin, NULL); 33 // fflush(stdin); 34 } 35 36 i = 0; 37 while (array[i][0]) 38 { 39 for (j = 1; j <= array[i][0]; j++)//同一行格子的位置 40 { 41 printf ("(%d,%d)", array[i][1], j); 42 } 43 printf ("\n"); 44 45 for (j = 1; j <= array[i][0]; j++) //同一列格子的位置 46 { 47 printf ("(%d,%d)", j, array[i][2]); 48 } 49 printf ("\n"); 50 51 //初始化左上到右下对角线上的第一个格子位置 52 //方法一: for (a = array[i][1], b = array[i][2]; a > 1 && b > 1; a--, b--); 53 //方法二: 54 a = array[i][1] - array[i][2]; 55 if (a >= 0) 56 { 57 b = 1; 58 a += b; 59 } 60 else 61 { 62 b = abs(a) + 1; 63 a = 1; 64 65 } 66 67 for (; a <= array[i][0] && b <= array[i][0]; a++, b++) //左上到右下对角线上的格子位置 68 printf ("(%d,%d)", a, b); 69 printf ("\n"); 70 71 //初始化左下到右上对角线上的第一个格子位置 72 //方法一: for (a = array[i][1], b = array[i][2]; a < array[i][0] && b > 1; a++, b--); 73 //方法二: 74 a = array[i][1] + array[i][2]; 75 if (a <= array[i][0] + 1) 76 { 77 a--; 78 b = 1; 79 } 80 else 81 { 82 b = a - array[i][0]; 83 a = array[i][0]; 84 85 } 86 87 for (; a >= 1 && b <= array[i][0]; a--, b++) //左下到右上对角线上的格子位置 88 printf ("(%d,%d)", a, b); 89 printf ("\n"); 90 i++; 91 } 92 return 0; 93 }