棋盘问题
棋盘问题
时间限制: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=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)
View Code
1 #include <stdio.h>
2 #include <math.h>
3 #include <memory.h>
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 }