Problem E of Contest 100000581

it2026-05-03  6

哇。。。我放声哭了,终于把他搞定了,本来昨晚夜里两点还想再继续找错的,但实在撑不下去了,今天就睡到了中午12点(捂脸 又对着网上大佬正确的代码找错!你让我好找啊 1、int s1(sumdj)、s2要

放在while语句里

测试应该是一次编译,把多个测试点一个接一个放。放while外sum值就有问题,所以会出现“答案错误50” 2、当for循环条件内,i从大到小,

i- -

3、

用while

语句没错,刚试了下没用就错,不知道测试点放了啥== 4、要看

样例

题目说的主对角线,md副对角线拿来都不知道,样例里有 5、

冒泡排序

再看看c的书温习

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main(){ int a[10][10]; int row[10],col[10]; int m,sumrow,sumcol; while(scanf("%d",&m)!=EOF){ //输入数组、得到每行的和 for(int i=0;i<m;i++){ sumrow=0; for(int j=0;j<m;j++){ scanf("%d ",&a[i][j]); sumrow=sumrow+a[i][j]; } row[i]=sumrow; scanf("\n"); } //得到每列的和、对角线之和 int sumdj=0; for(int j=0;j<m;j++){ sumcol=0; for(int i=0;i<m;i++){ sumcol=sumcol+a[i][j]; if(i==j){ sumdj=sumdj+a[i][j]; } } col[j]=sumcol; } int s2=0; for(int i=0;i<m;i++) s2+=a[i][m-1-i]; //把col、row、sumdj和都放到mix里 int mix[2*m+2]; for(int i=0;i<m;i++){ mix[i]=col[i]; } for(int i=m;i<2*m;i++){ mix[i]=row[i-m]; } mix[2*m]=sumdj; mix[2*m+1]=s2; // sort(mix,mix+2*m+2); //冒泡排序 int temp; for(int i=0;i<2*m+1;i++){ for(int j=0;j<2*m+1-i;j++){ if(mix[j]<mix[j+1]){ temp=mix[j]; mix[j]=mix[j+1]; mix[j+1]=temp; } } } // } for(int i=0;i<2*m+2;i++){ printf("%d ",mix[i]); } printf("\n"); } return 0; }

(以下是大神的代码,用来参考)

#include <cstdio> #include <algorithm> using namespace std; const int maxn=15; bool cmp(int a,int b){ return a>b; } int main(){ int a[maxn][maxn]; int b[25]={0}; int m,first=1; while(scanf("%d",&m)!=EOF){ for(int i=0;i<m;i++) for(int j=0;j<m;j++) scanf("%d",&a[i][j]); int cnt=0; for(int i=0;i<m;i++){ int sum=0; for(int j=0;j<m;j++) sum+=a[i][j]; b[cnt++]=sum; } for(int j=0;j<m;j++){ int sum=0; for(int i=0;i<m;i++) sum+=a[i][j]; b[cnt++]=sum; } int s1=0; for(int i=0;i<m;i++) s1+=a[i][i]; b[cnt++]=s1; int s2=0; for(int i=0;i<m;i++) s2+=a[i][m-1-i]; b[cnt++]=s2; sort(b,b+cnt,cmp); for(int i=0;i<cnt;i++) printf("%d ",b[i]); printf("\n"); } return 0; }
最新回复(0)