求出二维数组主对角线、次对角线以及周边元素之和

某个同学的题目,写了一下。

题目大概是这样的:

编写函数,求出二维数组主对角线、次对角线以及周边元素之和。

要求:二维数组的行数、列数、数组元素在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);
}

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

posted @ 2020-11-16 12:05  Micmacs  阅读(2367)  评论(0编辑  收藏  举报