c语言找金子重量之和最大的道路

该程序旨在通过输入的二维数组计算每行金子数之和,找出最大和所在的道路编号。初始问题为数组大小定义过大导致的溢出。解决方案是动态定义数组大小,根据用户输入的n和m创建n行m列的数组,从而避免溢出。程序通过遍历数组,对每行的金子数求和,并找到最大和对应的路径。
摘要由CSDN通过智能技术生成

 思路:
创建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列的数组。

查阅大佬博客:

c语言二维数组 溢出,C/C++开大数组溢出问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值