Kid Phantom 2024-05-03 10:42 采纳率: 45.5%
浏览 2
已结题

UPC斜线找错(急)

在一个NN格的棋盘中,有2N-1条从左上角到右下角的斜线,如下图:

由上图我们会发现,每个单元格只且只有一条从左上到右下的斜线经过它。
已知这个N*N的棋盘中,每个格子中都放有一个整数。求某个单元格所在的斜线上所有单元格数值的和。

例如:

例如:第2行第3列的单元格所在的斜线经过了第1行第2列,第2行第3列,和第3行第4列。所以这条斜线所经过的所有单元格数值的和为2+4+9=15。

输入
输入数据有多行。
第一行为一个整数N(2<=N<=100)。表示棋盘的大小。
接下来有N行,每行N个整数,共N*N个整数,表示棋盘中每个格子中的数值,所有数据都小于1000。
最后还有一行,有两个整数x,y(2<=x,y<=100),表示棋盘中第x行,第y列的位置。

输出
一个整数,求第x行,第y列单元格所在斜线上所有单元格数值的和。
样例输入 Copy
4
3 2 2 7
2 4 4 8
5 8 6 9
7 0 4 5
2 3
样例输出 Copy
15

错误代码:

#include<bits/stdc++.h>
#define MX 1000
using namespace std;
int a[MX + 10][MX + 10];
int main()
{
    int n,i,j,ans = 0;
    int x,y;
    cin >> n;
    for (i = 1;i <= n;i++)
    {
        for (j = 1;j <= n;j++)
        {
            cin >> a[i][j];
        }
    }
    cin >> x >> y;
    int p = x - y + 1,q = 1;
    for (i = p,j = q;i,j <= n;i++,j++)
    {
        ans += a[i][j];
    } 
    cout << ans << endl;
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-03 10:42
    关注

    引自免费微信小程序:皆我百晓生

    根据您的描述,您提供的代码在处理从左上角到右下角的特定对角线上的数字总和时存在一些问题。以下是修复后的代码,并解释了所做的更改:

    #include <iostream>
    using namespace std;
    
    int main() {
        int n, i, j, ans = 0;
        int x, y;
        
        // 输入棋盘大小
        cin >> n;
        
        // 初始化二维数组
        int a[n + 1][n + 1];
    
        // 输入棋盘中的值
        for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) {
                cin >> a[i][j];
            }
        }
    
        // 输入查询点坐标
        cin >> x >> y;
    
        // 计算对角线上的元素索引
        i = x - 1;
        j = y - 1;
    
        // 遍历对角线并累加元素值
        while (i >= 0 && j >= 0 && i < n && j < n) {
            ans += a[i][j];
            i--;
            j--;
        }
    
        // 输出结果
        cout << ans << endl;
        return 0;
    }
    

    主要改动包括:

    1. 更改二维数组的大小定义为int a[n + 1][n + 1],因为题目中给定的是从1开始计数的行列号。
    2. 移除了变量pq,它们在原代码中并未正确计算出对角线上的位置。
    3. 修改了循环条件,将for (i = p, j = q; i, j <= n; i++, j++)改为while (i >= 0 && j >= 0 && i < n && j < n),这样可以正确遍历指定对角线上的所有单元格。

    现在这段代码应该能正确计算指定对角线上的所有单元格数值之和。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?
  • ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件
  • ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
  • ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)
  • ¥21 matlab可以把图像数据转换为小波分析吗
  • ¥60 基于香农编码的图像压缩算法实现
  • ¥15 matlabGUI绘制一个函数与其导数的图像
  • ¥20 大数据采集用Python爬取猫眼电影数据