当此程序使用输入63923 99999运行时, 它停止给出标题信息。 任何人请帮我弄清楚我的代码是做错了什么。 用一些断言插入检查后 甚至做调试我无法弄清楚这段代码的问题。 这是我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<vector>
#include<iostream>
#include<string>
using namespace std;
#define ll long long
#define f(t,i,s,r) for(t i=s;i<r;i++)
ll s, m;
vector<ll>v;
string g=" Good Choice", b=" Bad Choice";
bool update (ll x,ll count) {
if (count < m) {
x = (x + s) % m;
if (v[x] == 1) {
return false;
}
else {
v[x] = 1;
return update (x, count+1);
}
}
else {
f (ll,i, 0, m) {
if (v[i] == 0)return false;
}
return true;
}
}
int main () {
freopen ("i.txt","r",stdin);
while (cin>>s>>m)
{
v.clear ();
v.resize (m,0);
v[0] = 1;
if (update (0, 1) == true) {
printf ("%10lld%10lld%s\n",s,m,g.c_str());
}
else {
printf ("%10lld%10lld%s\n", s, m,b.c_str());
}
}
}
答案 0 :(得分:1)
请在发布代码供其他人查看时,对其进行去混淆!
看起来,如果选择了数字,模数运算就不会足够早地将数字循环到您已经看过的数字上,并且您的递归过于深入,无法处理堆栈。
该算法应该可以简单地从递归转换为迭代。