棋盘问题
棋盘问题
时间限制: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 View Code1 #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 }
 
                    
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号