读书人

请大神看看有什么有关问题实在找不出

发布时间: 2013-04-09 16:45:09 作者: rapoo

请大神看看有什么问题,实在找不出来有什么问题
21个人围成一圈,从1开始报数,报到5的倍数的人退出,直到最后剩下一个人,问这个人的编号
# include<iostream>
using namespace std;
void fun(int *p,int n)
{
int t=1;
int i=0;
int m=1;
while(m<=n-1)
{
if(*(p+i)!=0)
{
t++;
}
if(t%5==0)
{

*(p+i)=0;
m++;
}
i++;
if(i==n)
{
i=0;
}
}
for(i=0;i<n;i++)
{
if(*(p+i)!=0)cout<<*(p+i)<<endl;
}
}
int main()
{
int a[21]={1},i;
for(i=0;i<21;i++)
{
a[i]=i+1;
}
fun(a,21);
return 0;
}

[解决办法]
if(t%5==0)
这个条件很容易为真,比如t=10的时候,只要if(*(p+i)!=0)
这个条件不满足,那么又进去加一次m,所以,条件判断不严谨。可以改成把t置为1,当你加m的时候。
还有我感觉你应该%6才对。
[解决办法]
上面的代码只是告诉你要格式化。


# include <iostream>

using namespace std;

void fun(int * p, int n)
{
int t = 0;
int i = 0;
int m = 0;
while (m != n - 1)
{
if (p[i] != 0)
{
t++;
if (t % 5 == 0)
{
p[i] = 0;
m++;
}
}
i++;
if (i == n)
i = 0;
}
for (i = 0; i < n; i++)
{
if (p[i] != 0)
cout << p[i] << endl;
}
}

int main()
{
int a[21];
for (int i = 0; i < 21; i++)
a[i] = i + 1;
fun(a, 21);

return 0;
}

注意几个变量都初始化成0了,+1-1这是常见的错误;
同时注意对t和m的维护被加到同一个if中去了。

读书人网 >C++

热点推荐