要是70分就来看看这篇帖子
查看原帖
要是70分就来看看这篇帖子
1385791
fushuoting楼主2024/9/25 22:04

大家一定要注意,本题有除以0的可能 原70分代码:

#include<iostream>
using namespace std;
int main()
{
	int n, m, k;
	cin >> k >> m >> n;
	int a, b;
	bool flag = false;
	for (int i = 1; i <= m; i++)
	{
		cin >> a >> b;
		if (k / a * b >= n)
		{
			cout << i << ' ';
			flag == false ? flag = true : flag = true;
		}
    }
	if (flag == false)
	{
		cout << -1;
	}
	return 0;
}

这时,10个测试点变成了7个AC,3个RE。 思来想去,终于发现了错误: 本题有除以零的可能 第二版代码:

#include<iostream>
using namespace std;
int main()
{
	int n, m, k;
	cin >> k >> m >> n;
	int a, b;
	bool flag = false;
	for (int i = 1; i <= m; i++)
	{
		cin >> a >> b;
		if (k / a * b >= n&&a!=0)//加了一个特判
		{
			cout << i << ' ';
			flag == false ? flag = true : flag = true;
		}
	}
	if (flag == false)
	{
		cout << -1;
	}
	return 0;
}

这时3个RE还是RE,我发现了漏洞: if (k / a * b >= n&&a!=0)//同时运算了,除以0还是一样RE 接下来请看第三版代码:

#include<iostream>
using namespace std;
int main()
{
	int n, m, k;
	cin >> k >> m >> n;
	int a, b;
	bool flag = false;
	for (int i = 1; i <= m; i++)
	{
		cin >> a >> b;
		if (a != 0)
		{
			if (k / a * b >= n)
			{
				cout << i << ' ';
				flag == false ? flag = true : flag = true;
			}
		}
	}
	if (flag == false)
	{
		cout << -1;
	}
	return 0;
}

然后RE就变成了WA 我才想到我又忽视了一点: 如果法力消耗为零,只要你攻击不是0,你怎样都能把boss击杀 这时,最终版代码就来了

#include<iostream>
using namespace std;
int main()
{
	int n, m, k;
	cin >> k >> m >> n;
	int a, b;
	bool flag = false;//建立判断是否输出负一
	for (int i = 1; i <= m; i++)
	{
		cin >> a >> b;
		if (a != 0)//特判是否消耗法力为零
		{
			if (k / a * b >= n)//运算能否击杀boss
			{
				cout << i << ' ';//如果可以就输出
				flag == false ? flag = true : flag = true;//回顾我们熟悉的问号表达式
			}
		}
		else
		{
			if (b != 0)//特判*2,不要特判也是AC,本人亲测过
			{
				cout << i << ' ';
			}
		}
	}
	if (flag == false)//判断是否击杀boss
	{
		cout << -1;
	}
	return 0;//结束代码
}

天哪,真的累死我了…… 希望这篇帖子对你们有帮助

2024/9/25 22:04
加载中...