題目:同行列對角線的格子
輸入
一行,三個自然數N,i,j,相鄰兩個數之間用單個空格隔開。1 <= N <= 10。
輸出
四行:
第一行:從左到右輸出同一行格子位置;
第二行:從上到下輸出同一列格子位置;
第三行:從左上到右下輸出同一對角線格子位置;
第四行:從左下到右上輸出同一對角線格子位置。
其中每個格子位置用如下格式輸出:(x,y),x爲行號,y爲列號,採用英文標點,中間無空格。
相鄰兩個格子位置之間用單個空格隔開。
樣例輸入
4 2 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)
解題思路
1.先確定範圍即邊界,然後找到座標點
2.首先輸出以固定橫座標的列座標點輸出
(3,1)(3,2)(3,3)(3,4)==> 列座標依次遞增,當列座標==N時終止
3.其次輸出以固定列座標的橫座標點輸出
(1,2)(2,2)(3,2)(4,2)==> 橫座標依次遞增,當橫座標==N時終止
4.然後輸出左上到右下對角線上的座標點
(2,1)(3,2)(4,3) ==> 如果橫座標大於等於列座標:(橫-列+1,1)橫、列座標依次遞增。
==> 如果橫座標小於列座標:(1,列-橫+1)橫、列座標依次遞增。當橫座標或者列座標==N時終止
5.最後輸出左下到右上對角線上的格子的位置
(4,1)(3,2)(2,3)(1,4)==> 如果(N-橫) <(列-1) :(N,橫+列-N),橫座標依次遞減,列座標依次遞增
==>如果(N-橫) >= (列-1) :(橫+列-1,1),橫座標依次遞減,列座標依次遞增。當橫座標==1或者列座標==N時終止。
代碼
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N, i, j;
int num_i, num_j;
scanf("%d%d%d", &N, &i, &j);
// 輸出第一個條件:輸出以固定橫座標的列座標點輸出
for (num_j=1; num_j<N;num_j++)
printf("(%d,%d) ",i, num_j);
printf("(%d,%d)\n",i,num_j);
// 輸出第二個條件:輸出以固定橫座標的列座標點輸出
for (num_i=1; num_i<N;num_i++)
printf("(%d,%d) ",num_i,j);
printf("(%d,%d)\n",num_i,j);
// 輸出第三個條件:然後輸出左上到右下對角線上的座標點
// 輸出第四個條件,然後輸出左下到右上對角線上的座標點
if (i>=j)
{
//第三個條件:第一種情況:如果橫座標大於等於列座標:(橫-列+1,1)橫、列座標依次遞增。當橫座標或者列座標==N時終止
for (num_i = i-j+1, num_j = 1; num_i<N;num_i++, num_j++)
printf("(%d,%d) ",num_i, num_j);
printf("(%d,%d)\n",num_i, num_j);
//第四個條件:第一種情況:如果(N-橫) >= (列-1) :(橫+列-1,1),
//橫座標依次遞減,列座標依次遞增。當橫座標==1或者列座標==N時終止。
for (num_i = i+j-1, num_j = 1; num_i>1 && num_j<N; num_i--, num_j++)
printf("(%d,%d) ",num_i, num_j);
printf("(%d,%d)\n",num_i, num_j);
}
else
{
//第三個條件:第二種情況:如果橫座標小於列座標:(1,列-橫+1)橫、列座標依次遞增。當橫座標或者列座標==N時終止
for (num_i = 1, num_j = j-i+1; num_j<N; num_i++, num_j++)
printf("(%d,%d) ",num_i, num_j);
printf("(%d,%d)\n",num_i, num_j);
//第四個條件:第二種情況:如果(N-橫) <(列-1) :(N,橫+列-N),
//橫座標依次遞減,列座標依次遞增。當橫座標==1或者列座標==N時終止。
for (num_i = N, num_j = i+j-N; num_i>1 && num_j<N; num_i--, num_j++)
printf("(%d,%d) ",num_i, num_j);
printf("(%d,%d)\n",num_i, num_j);
}
return 0;
}