思路:
创建n行m列二维数组
然后用循环给a[n][m]赋值
然后挨个判断:判断第一行有哪些金子数 然后加到sum[1] 第二行加到sum[2] 以此类推(sum要初始化所有元素为0)
然后判断最大sum,并记下其下标,即为金子重量之和最大的道路编号。
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n][m];
//输入n行m列的数组,代表每条道路上的元素
//注意下标,行i遍历0到<n或者1到<=n,满足有n个元素被读入就好
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
int sum[n],k,d;
//先给sum每一个元素赋0
for(int i=0;i<n;i++){
sum[i]=0;
}
//依次判断每条道路上的金子数,将其加到sum[n]
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]%8==0){
sum[i]+=a[i][j];
}
}
}
// 验证:这里输出每条道路的金子数之和
// for(int i=0;i<n;i++){
// cout<<sum[i]<<endl;
// }
//求金子重量之和最大的道路编号
k=sum[0];//设sum第一个元素为最大,用k记录最大数,d记录最大数的下标
// d=0;//这里d不赋初值也可以,因为关键在于判断出最大sum后,得到的对应下标,将那个赋给d就好
for(int i=1;i<n;i++){
if(k<=sum[i]){
k=sum[i];
d=i+1;//由于这个数组是从0开始,但是实际道路从1开始,所以要+1
}
}
cout<</*k<<' '<<*/d;
}
最开始出现了一个问题,调试提示
这是因为开大数组溢出了。
这里的解决方法:最开始二维数组赋值的时候,不能直接定义一个100行10000列的数组,你得输入n和m,然后定义一个n行m列的数组。
查阅大佬博客: