20190901-1

思路

将所有的数据用数组保存下来再进行判断
错误的代码

第一次尝试

#include<iostream>
#include<math.h>//错误点三:注意头文件是math.h
using namespace std;
struct apple {
	int lost = 0, all=0;
}a[1000000];
int main() {
	int n, m;
	int ans1 = 0, ans3 = 0;
	int ans2=0;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].all;
		for (int j = 1; j <= m; j++) {
			int lost_part;
			cin >> lost_part;
			a[i].all += lost_part;
			a[i].lost += lost_part;
		}
		ans1 += a[i].all;
	}
	for (int k = 1; k <= n; k++) {
		if (a[k-1].lost > a[k ].lost) ans2 = k;   //错误点一:出现k+1>3的情况
	}
	ans3 =abs( a[ans2].lost);//错误点二:注意题目要求的是输出绝对值
	cout << ans1 << " " << ans2 << " " << ans3;
	return 0;
}

不清楚为什么错了。

第二次尝试

#include<iostream>
#include<math.h>
using namespace std;
#define N 10000
int main() {
	int n, m;
	int a[N] = { 0 }, b[N] = { 0 };
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		for (int j = 1; j <= m; j++) {
			int lost;
			cin >> lost;
			b[i] += lost;
		}
		a[i] = a[i] + b[i];
	}
	int ans1 = 0, ans2 = 0;
	for (int k = 1; k <= n; k++) {
		ans1 += a[k];
		if (b[k - 1] > b[k]) ans2 = k;
	}
	cout << ans1 << " " << ans2 << " " << abs(b[ans2]);
	return 0;
}

这个代码只给了20分。

新的思路

我们不需要记录所有的数据,只需要寻找符合要求的数据。

第三次失败

#include<iostream>
using namespace std;
int main() {
  int m,n;
  cin>>n>>m;
  int ans1=0,ans2=0,ans3=0;
  for(int i=1;i<=n;i++) {
    int sum;//每棵树上总共的剩余苹果
    cin>>sum;
    int lost,lost_all=0;
    for(int j=1;j<=m;j++) {
      cin>>lost;
      lost_all+=lost;
    }//每棵树总共损失的苹果
    sum=sum+lost_all;
    ans1+=sum;
    lost_all=-lost_all;
    if(ans2<=lost_all){//容易忽略如果一个苹果也没有落下来  大错特错,小于ans3
     ans3=lost_all;
     ans2=i;//此时不是i-1了
     }
    }
    cout<<ans1<<" "<<ans2<<" "<<ans3;
    return 0;
    }
    

错误代码
改为ans3后只能得到60分
除掉=后正确。

正确的代码

#include<iostream>
using namespace std;
int main() {
  int m,n;
  cin>>n>>m;
  int ans1=0,ans2=0,ans3=0;
  for(int i=1;i<=n;i++) {
    int sum;//每棵树上总共的剩余苹果
    cin>>sum;
    int lost,lost_all=0;
    for(int j=1;j<=m;j++) {
      cin>>lost;
      lost_all+=lost;
    }//每棵树总共损失的苹果
    sum=sum+lost_all;
    ans1+=sum;
    lost_all=-lost_all;
    if(ans3<lost_all){//容易忽略如果一个苹果也没有落下来  大错特错,小于ans3
     ans3=lost_all;
     ans2=i;//此时不是i-1了
     }
    }
    cout<<ans1<<" "<<ans2<<" "<<ans3;
    return 0;
    }
    

总结

这道题目不难。错在以下几点:
1、没有写明各个变量的含义,从而出现错误。
2、遇见多类型得·就考虑数组,实际上数组用着不方便,若为同种类型数据,则使用两个数组就可以了。
3、以后要把每块代码得功能以及变量含义写在纸上。

第二天开始做又错了

#include<iostream>
using namespace std;
int main() {
  int n=0,m=0,ans1=0,ans2=0,ans3=0;
  cin>>n>>m;
  int sum=0,lost_all=0,lost=0;
  for(int i=1;i<=n;i++) {
    cin>>sum;
    for(int j=1;j<=m;j++) {
      cin>>lost;
      lost_all+=lost;
    }//计算每颗果树总共落下的果子,值为负数
    lost_all=-lost_all;
    sum-=lost_all;  
    ans1+=sum;
    if(ans3<lost_all)  {
      ans2=i;
      ans3=lost_all;
    }
  }
  cout<<ans1<<" "<<ans2<<" "<<ans3;
  return 0;
}
    //解决方案:将lost_all的每一次赋值在循环内。变量的赋值在循环内。

错误原因:
1、lost_all在每一次运算中没有归零。

收获:
1、在有循环结构中,注意每一次循环的开始,定义的值否是自己想要的。

正确的做法

#include<iostream>
using namespace std;
int main() {
  int n,m,ans1=0,ans2=0,ans3=0;
  cin>>n>>m;
  int sum,lost;
  for(int i=1;i<=n;i++) {
    cin>>sum;  
     int lost_all=0;
    for(int j=1;j<=m;j++) {    
      cin>>lost;
      lost_all+=lost;
    }//计算每颗果树总共落下的果子,值为负数
    lost_all=-lost_all;
    sum-=lost_all;  
    ans1+=sum;
    if(ans3<lost_all)  {

      ans2=i;
      ans3=lost_all;
    }
  }
  cout<<ans1<<" "<<ans2<<" "<<ans3;
  return 0;
}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值