同行列對角線的格子(C語言編程基礎之多維數組)

題目:同行列對角線的格子

在這裏插入圖片描述
輸入
一行,三個自然數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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章