原题可以从下面的链接中找到
原题
最开始我写的代码是这样的
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <iostream>
#include<vector>
#include<cstdio>
#include<set>
#include<string>
using namespace std;
#define DEBUG
bool has_7(int in)
{
if (in % 7 == 0)return true;
int t = in;
while (t>0)
{
if (t % 10 == 7)return true;
else
{
t = t / 10;
}
}
return false;
}
int persons[4];
int main()
{
#ifdef DEBUGw
freopen("sb.txt","r",stdin);
#endif // DEBUG
int count;
cin >> count;
int times = 0;//一共报了几个数字
int num = 0;//他正在报的数字
while (times<count)
{
for (int i=0; i < 4; i++)
{
num++;
if (has_7(num))
{
persons[i]++;
}
else
{
times++;
}
}
}
for (int i = 0; i < 4; i++)
{
printf("%d\n", persons[i]);
}
return 0;
}
然而很遗憾的是最后报错只有八十分的成绩·····
这个问题就在于在这一段代码中
while (times<count)
{
for (int i=0; i < 4; i++)
{
num++;
if (has_7(num))
{
persons[i]++;
}
else
{
times++;
}
}
}
这个for循环没有检查times的大小.当times在for循环内部超出count的大小,程序就已经出错了。
正确的程序应该是这样的
bool has_7(int in)
{
if (in % 7 == 0)return true;
int t = in;
while (t>0)
{
if (t % 10 == 7)return true;
else
{
t = t / 10;
}
}
return false;
}
int persons[4];
int main()
{
#ifdef DEBUGw
freopen("sb.txt","r",stdin);
#endif // DEBUG
int count;
cin >> count;
int times = 0;//一共报了几个数字
int num = 0;//他正在报的数字
while (times<count)
{
for (int i=0; i < 4; i++)
{
num++;
if (has_7(num))
{
persons[i]++;
}
else
{
times++;
}
if (times >= count)
break;
}
}
for (int i = 0; i < 4; i++)
{
printf("%d\n", persons[i]);
}
return 0;
}