解题思路:
1.设元素下标为i,j ,矩阵阶数为Length,和为sum;
2.主对角线元素下标满足:i==j;
3.副对角线元素下标满足:i+j-1==Length;
4.输入一个元素Mxtrix,判断下标是否满足主副对角线元素下标条件,满足,sum加上这个数;
参考代码:
#include <stdio.h> int main() { int sum = 0, Length, Matrix; scanf( "%d", &Length ); //阶数 for ( int i = 1; i <= Length; i++ ) //行 for ( int j = 1; j <= Length; j++ ) //列 { scanf( "%d", &Matrix ); if ( (i == j) || (i + j - 1) == Length ) //判断 sum += Matrix; //求和 } printf( "%d", sum ); //输出 return(0); }
别忘点赞哦-.-
0.0分
70 人评分
大佬们这个为什么错了啊 #include<stdio.h> int main() { int num[100][100]; int num1,num2,i,j; int n; int a=0,b=0,c=0; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&num[i][j]); if(i==j) a=num[i][j]+a; else if(i+j==n-1) b=num[i][j]+b; else if(i==(n-1)/2 && j==(n-1)/2 ) c=num[i][j]; } } printf("%d",a+b-c); return 0; }
if里面的判断条件应该是i+j+1==N;作者不小心打错了吧
甜甜凌 2023-03-12 13:01:05 |
作者的i和j都是从1开始的,你的应该是从零开始,不一样
#include<stdio.h> int main() { int arry[20][20],i,j,zum=0,fum=0,sum,n; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&arry[i][j]); } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { zum=zum+arry[i][j]; } if(j==n-i-1) { fum=fum+arry[j][i]; } } } if(n%2==0) { sum=zum+fum; printf("%d",sum); }
include<stdio.h> #include<string.h> #include<math.h> int main(){ int sum=0,n,a[10][10],i,j; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { sum+=a[i][j]; } if(i+j==n-1) { sum+=a[i][j]; } } } printf("%d",sum); } 这样为啥错了啊
KK 2022-01-16 13:31:53 |
循环部分条件应该改成if(i==j || i+j=n-1),你这样写n为奇数时正副对角线有个交点(两个条件都满足),sum重复加多了一个
这样写为什么错啊 #include<stdio.h> int main(){ int a,b,c,d,sum=0; scanf("%d",&a); int n[a][a]; for(b=0;b<a;b++){ for(c=0;c<a;c++){ scanf("%d",&n[b][c]); } } for(b=0;b<a;b++){ c=0; sum+=n[b][c]; c++; d=a-1; sum+=n[b][d]; d--; } if(a%2!=0) sum-=n[(a-1)/2][(a-1)/2]; printf("%d",sum); }
您好,当矩阵大小为5*5 时,输入数据为1至25 时,输出答案为121 ,正确答案是117 , 是否是程序还存在某些疏漏呢?
正男 2021-08-11 23:05:38 |
抱歉,是我输入错了,导致结果错了
为什么运行错误啊(非法的内存访问,数组越界。。。) #include<stdio.h> int main(){ int n,a[10][10],sum=0; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d",&a[i][j]); if(i==j||i+j-1==n){ sum+=a[i][j]; } } } printf("%d",sum); return 0; }
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:640 |
简单的a+b (C语言代码)浏览:524 |
三角形 (C++代码)递推浏览:755 |
1113题解浏览:784 |
愚蠢的摄影师 (C++代码)浏览:936 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1155 |
Tom数 (C语言代码)浏览:492 |
字符串的输入输出处理 (C语言代码)浏览:987 |
C语言程序设计教程(第三版)课后习题12.2 (C语言代码)浏览:753 |
微白 2024-01-02 22:24:38 |
你的代码看起来是用来计算一个正方形矩阵中对角线元素之和(主对角线和次对角线),但是结果中排除了矩阵的中心元素。 让我们来看一下你的代码: a 存储主对角线元素之和。 b 存储次对角线元素之和。 c 存储中心元素的值(如果矩阵的边长是奇数时)。 在计算总和时,你使用了 a + b - c 的方式来排除中心元素的值。这个方法是正确的,因为 a + b 得到的是所有对角线元素之和,然后减去中心元素的值,就得到了排除中心元素的总和。 这段代码对于给定的正方形矩阵,正确地计算了主对角线和次对角线上元素的总和,并排除了中心元素的值。