1. 程式人生 > 實用技巧 >求出二維陣列主對角線、次對角線以及周邊元素之和

求出二維陣列主對角線、次對角線以及周邊元素之和

某個同學的題目,寫了一下。

題目大概是這樣的:

編寫函式,求出二維陣列主對角線、次對角線以及周邊元素之和。

要求:二維陣列的行數、列數、陣列元素在main函式中由鍵盤輸入。

#include <stdio.h>

int main()
{
    int row,col;
    printf("請輸入“行數”和“列數”:");
    scanf("%d,%d",&row,&col);
    printf("請為%d*%d陣列賦值:\n",row,col);

    int arr[row][col];
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
        {
            printf("當前[%d,%d]:",j,i);
            scanf("%d",&arr[j][i]);
        }
    }
    int count = row > col ? col : row;
    int xSpeed = (row - 0)/count;
    int ySpeed = (col - 0)/count;
    printf("X軸每次遞增%d個下標\n",xSpeed);
    printf("Y軸每次遞增%d個下標\n",ySpeed);

    //這裡要考慮對角線不標準情況,比如3*4的矩形

    int numA = 0;
    int x=0,y=0;
    for(int i = 0; i < count; i++)
    {
        printf("%d,%d\n",x,y);
       numA += arr[x][y];
       x+=xSpeed;
       y+=ySpeed;

        //這裡要考慮對角線不標準情況,比如3*4的矩形
        //對角線的最後一位可能不是右下角的座標,直接強制指向右下角座標
       if(x == col-1 && y != row-1 || x != col-1 && y == row-1)
       {
           x = row-1;
           y = col -1;
       }

    }
    printf("主對角線之和為:%d\n",numA);

    int numB = 0;
    x = col-1;
    y = 0;
    for(int i = 0; i < count; i++)
    {
        printf("%d,%d\n",x,y);
       numB += arr[x][y];
       x-=xSpeed;
       y+=ySpeed;
        //這裡要考慮對角線不標準情況,比如3*4的矩形
        //對角線的最後一位可能不是左下角的座標,直接強制指向左下角座標
       if(x == 0 && y != row-1 || x != 0 && y == row-1)
       {
           x = 0;
           y = row -1;
       }
    }
    printf("次對角線之和為:%d\n",numB);


    int numC=0;
    for (int i =0;i < row;i ++)
    {
        for (int j= 0; j < col; j++)
        {
            if(i==0 || j == 0 || i == row-1 || j == col -1)
            {
                numC += arr[i][j];
            }
        }
    }
    printf("周邊長度之和:%d\n",numC);
}

  某位同學,做人很重要啊!