鱼C论坛

 找回密码
 立即注册
查看: 1542|回复: 3

[已解决]求矩阵的边缘和

[复制链接]
发表于 2023-4-2 21:53:10 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void main()
                      {
                          int a[99][99],h,l,i,j,sum;
                          scanf("%d%d",&h,&l);
                          for(i=0;i<h;i++)
                          for(j=0;j<l;j++)
                          scanf("%d",&a[i][j]);
                          for(i=0;i<h;i++)
                          {
                              for(j=0;j<l;j++)
                              {
                                  if(i==0)
                                  sum=sum+a[0][j];
                                  else if(j==0)
                                  sum=sum+a[i][0];
                                  else if(i==(h-1))
                                  sum=sum+a[i][j];
                                  else if(j==(l-1))
                                  sum=sum+a[i][j];
                                 
                              }
                          }
                           sum=sum-a[0][0]-a[h-1][l-1]-a[0][l-1]-a[h-1][0];   
                          printf("%d",sum);
                        }
                     求大佬帮忙看看错误在哪
最佳答案
2023-4-2 22:26:01
1203081549 发表于 2023-4-2 22:06
您好,您的代码跟我的都有一个同样的问题就是把删除语句注释掉之后才能正确执行

那是因为之前的代码忽略了角落的元素,你可以试试这个代码:
#include <stdio.h>

void main() {
    int a[99][99], h, l, i, j, sum = 0;
    scanf("%d%d", &h, &l);
    for (i = 0; i < h; i++)
        for (j = 0; j < l; j++)
            scanf("%d", &a[i][j]);
    for (i = 0; i < h; i++) {
        for (j = 0; j < l; j++) {
            if (i == 0 && j > 0 && j < l - 1) {
                sum += a[i][j];
            } else if (j == 0 && i > 0 && i < h - 1) {
                sum += a[i][j];
            } else if (i == h - 1 && j > 0 && j < l - 1) {
                sum += a[i][j];
            } else if (j == l - 1 && i > 0 && i < h - 1) {
                sum += a[i][j];
            }
        }
    }
    // Add the corner elements
    sum += a[0][0] + a[h - 1][l - 1] + a[0][l - 1] + a[h - 1][0];
    printf("%d", sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-2 21:56:59 | 显示全部楼层
这段代码的目的是计算一个给定矩阵的边缘元素之和。经过检查,我发现了以下几个问题。

请参考以下修订后的代码:
#include <stdio.h>

void main() {
    int a[99][99], h, l, i, j, sum = 0;
    scanf("%d%d", &h, &l);
    for (i = 0; i < h; i++)
        for (j = 0; j < l; j++)
            scanf("%d", &a[i][j]);
    for (i = 0; i < h; i++) {
        for (j = 0; j < l; j++) {
            if (i == 0 || j == 0 || i == (h - 1) || j == (l - 1)) {
                sum = sum + a[i][j];
            }
        }
    }
    if (h > 1 && l > 1) {
        sum = sum - a[0][0] - a[h - 1][l - 1] - a[0][l - 1] - a[h - 1][0];
    }
    printf("%d", sum);
}

  • 初始化 sum = 0,避免使用未初始化的变量。
  • 使用逻辑运算符简化了 if 语句,使代码更清晰。
  • 添加了一个条件语句 if (h > 1 && l > 1),以确保矩阵的行数和列数都大于1。如果矩阵的行数或列数为1,边角元素只会被计算一次,所以无需减去它们。


这应该修复了代码中的错误。现在,这段代码应该可以正确地计算矩阵边缘元素的和。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-2 22:06:39 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-4-2 21:56
这段代码的目的是计算一个给定矩阵的边缘元素之和。经过检查,我发现了以下几个问题。

请参考以下修订后 ...

您好,您的代码跟我的都有一个同样的问题就是把删除语句注释掉之后才能正确执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 22:26:01 | 显示全部楼层    本楼为最佳答案   
1203081549 发表于 2023-4-2 22:06
您好,您的代码跟我的都有一个同样的问题就是把删除语句注释掉之后才能正确执行

那是因为之前的代码忽略了角落的元素,你可以试试这个代码:
#include <stdio.h>

void main() {
    int a[99][99], h, l, i, j, sum = 0;
    scanf("%d%d", &h, &l);
    for (i = 0; i < h; i++)
        for (j = 0; j < l; j++)
            scanf("%d", &a[i][j]);
    for (i = 0; i < h; i++) {
        for (j = 0; j < l; j++) {
            if (i == 0 && j > 0 && j < l - 1) {
                sum += a[i][j];
            } else if (j == 0 && i > 0 && i < h - 1) {
                sum += a[i][j];
            } else if (i == h - 1 && j > 0 && j < l - 1) {
                sum += a[i][j];
            } else if (j == l - 1 && i > 0 && i < h - 1) {
                sum += a[i][j];
            }
        }
    }
    // Add the corner elements
    sum += a[0][0] + a[h - 1][l - 1] + a[0][l - 1] + a[h - 1][0];
    printf("%d", sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 10:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表