大家一定要注意,本题有除以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;//结束代码
}
天哪,真的累死我了…… 希望这篇帖子对你们有帮助