晓君c++ 2024-03-12 21:23 采纳率: 70%
浏览 14
已结题

对角线的和c++求解

对角线的和
描述

在一个N*M的二维数组中,求位置(x,y)上的数以及其所在的两条对角线的所有数的和。

输入描述
第一行两个正整数,N和M。其中 2<=M,N<=100。
以下N行,每行M个数,表示每个元素的值。
最后一行,两个正整数x,y,表示给出的元素的位置。

输出描述
一行,一个正整数,为(x,y)所在元素及其对角线上的所有数的和。

样例输入 1

3 3
3 5 8
7 2 6
8 8 9
2 2
样例输出 1

30
提示

N,M的取值范围是:2<=M,N<=100
结果在int范围内

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-03-12 21:24
    关注

    晓君c++ 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    可以通过以下步骤来解决这个问题:

    1. 首先,读取输入的N和M,以及二维数组的值。
    2. 然后,读取待查询的位置(x,y)。
    3. 根据(x,y)的坐标,可以确定对角线上的元素的位置,分别为(i,j)和(k,l),其中i+j=x+y和i-l=x-y。
    4. 使用两个变量sum1和sum2分别表示两条对角线上的数的和,初始值都为0。
    5. 遍历整个二维数组,同时判断每个元素的位置是否在两条对角线上,如果是,则将其值加到相应的和上。
    6. 最后,输出第(x,y)个位置上的元素以及两条对角线上的所有数的和。

    下面是该问题的C ++代码实现示例:

    #include <iostream>
    using namespace std;
    
    int main() {
        int N, M;
        cin >> N >> M;
    
        int arr[N][M];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                cin >> arr[i][j];
            }
        }
    
        int x, y;
        cin >> x >> y;
    
        int sum1 = 0, sum2 = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (i + j == x + y || i - j == x - y) {
                    sum1 += arr[i][j];
                }
                if (i + j == x + y || j - i == x - y) {
                    sum2 += arr[i][j];
                }
            }
        }
    
        cout << arr[x][y] << " " << sum1 + sum2 << endl;
    
        return 0;
    }
    

    这段代码首先读取输入的N和M,然后使用二维数组存储所有元素的值。接着,读取待查询的位置(x,y)。然后,使用两个循环遍历整个数组,判断每个元素的位置是否在两条对角线上,并将符合条件的元素值求和。最后,输出给定位置上的元素值以及两条对角线上的和。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日