c-请大家看看这个程序错在哪。谢谢。

问题描述

请大家看看这个程序错在哪。谢谢。


#include
#include
#include
void monkey(int, int, int);
int main(void)
{
int n;
scanf("%d", &n);
int i;
for (i = 1; i <= n; i++)
{
int n, m, p;
scanf("%d %d %d", &n, &m, &p);
monkey(n, m, p);
}
return 0;
}
void monkey(int n, int m, int p)
{
int *ar = (int *)malloc((n + 1)*sizeof(int));
memset(ar, 0, n + 1);
int out =n;
int now = p - 1;
while (out-1)
{
int i;
for (i = 1; i <= m; i++)
{
if (now + 1 > n)
now = 1;
else
++now;
if (ar[now])
--i;
if (!(ar[now]) && i == m)
ar[now] = 1;
}
--out;
}
printf("%3dn", now);
free(ar);
}

解决方案

int i=0;
while( i<N)//这地方刚打错了,应该看得出
{
if(mon[p++])//猴子数组都初始化为1,首次报数为真
i++;

解决方案二:

1、最好不要用同名变量。
2、memset第3个参数表示字节数要用(n + 1)*sizeof(int)
3、printf("%03dn", now);

解决方案三:

以前写了个一样的你看看
#include
#define MAX 100
#define step 3
#define begin 1
int main()
{
int n,cnt,i=0,j=0;
int M,N,P;
int a[MAX];
scanf("%d%d%d",&M,&N,&P);
cnt=M;
while(i
for( i=P-1,j=1;cnt>1;i==M-1?i=0:i++)
{
if(a[i]!=1) {
if(j==N){
a[i]=1;
j=1;
// printf("%d outn",i+1);
--cnt;
}
else
j++;
}

}
for(i=0;a[i];i++);
printf("%3d",i+1);
}

解决方案四:

错的太多,
void monkey(int N, int m, int p)//N为报数,m为参与猴子数量,p为当前开始报数的猴子编号
{
char * mon=(char*)malloc(m);
int TotalMonkey=m;
memset(mon,1,m);
while(m>1)//只剩最后一只猴子时退出循环
{
int i=0;
while( i
{
if(mon[p++])//猴子数组都初始化为1,首次报数为真
i++;
if(p>TotalMonkey)
p%=TotalMonkey;
}
mon[p-1]=0;
--m;
}
for遍历mon[],输出值为真的元素的下标即为猴王的序号
}

解决方案五:

这样改一下吧,你的循环有问题,进入死循环了

void monkey(int, int, int);
int main(void)
{

    int n, m, p; //数量,顺序 当前位置
    scanf("%d %d %d", &n, &m, &p);
    monkey(n, m, p);
return 0;

}
void monkey(int n, int m, int p)
{
int *ar = (int *)malloc((n)*sizeof(int));
memset(ar, 0, n);
int out =n;
int now = p - 1;
while (out-1)
{
int i;
int count=0;
for (i = 1; count < m; i++)
{
count++;
if (!ar[now])
--count;

        if (now >= n)
            now = 0;
        else
            ++now;
        if (count == m)
        {
            ar[now] = 1;
        }
    }
    --out;
}
printf("%3dn", now);
free(ar);
时间: 2024-12-26 23:19:52

c-请大家看看这个程序错在哪。谢谢。的相关文章

c-请大家看看这个程序错在哪?

问题描述 请大家看看这个程序错在哪? #include #include using namespace std; int main(void) { char ch; int i=1; char *before = new char[1],*temp; while (cin >> ch) { temp = new char[i]; temp[i - 1] = ch; for (int j = 0; j < i - 1; j++) temp[j] = before[j]; delete[]

c语言 报数 算法-请各位前辈看一下我这个程序错在哪里

问题描述 请各位前辈看一下我这个程序错在哪里 这个程序是一组人循环报数,报到3的退出,求最后剩下的那个人是第几号,改了好多次都调试不成功.所以来请教各位前辈们.谢谢. //报数,报到3的退出,求最后剩下的成员序数 #include void function(int *a, int n) { int i = 0, k = 1; while (n > 1) { while (1) { if ( (a[i] != '') && (k != 3) && (a[i] != 0

max-请问这个程序错在哪里?

问题描述 请问这个程序错在哪里? #include int main(){ int max(int xint y); int abc; scanf(""%d%d""&a&b); c=max(ab); printf(""max=%dn""c); return 0;}int max(int xint y);{ int z; if(x>y)z=x; else z=y; return(z);}构建时出现一个错误F

android-谁能帮我看看下面的Android程序错在哪里

问题描述 谁能帮我看看下面的Android程序错在哪里 解决方案 自己仔细调试下,如果提问,请给出代码.错误提示.出现什么问题等才好帮你. 解决方案二: 你根本没放code...... 解决方案三: 把你的代码放出来看看 解决方案四: 神马都没有................ 解决方案五: 好歹把代码贴出来啊....... 解决方案六: 哈哈你根本没放code...... 解决方案七: 看到有这样问问题的也是醉了......

printf-下面的程序错在哪? 为什么无论输入两个什么数,其输出结果都是0?

问题描述 下面的程序错在哪? 为什么无论输入两个什么数,其输出结果都是0? .............. void main() { float min(float x,float y); float a,b,m; scanf("%f%f",&a,&b); m=min(a,b); printf("min is %dn",m); system("pause"); } float min(float x,float y) { floa

c语言程序-请高手 看看这个程序 是什么问题

问题描述 请高手 看看这个程序 是什么问题 include int main () { int Isprime(int t) { int x; for(x = 2;x < t;x++) { if(t%x == 0) break; } if (x == t) return 1; else return 0; } int n(k) { int t; for (t ==2; t<= k;t++) { if(Isprime(t)); printf("%dn",t); } } int

我的2012-3*3整型距阵对角线元素之和,这个程序错哪里呢?

问题描述 3*3整型距阵对角线元素之和,这个程序错哪里呢? #includeint main (){int a[3][3];int ijs=0;scanf(""%d""&a[i][j]);for(i=0;i<3;i++){for(j=0;j<3;j++)if(i==j) printf(""%d""a[i][j]);s=s+a[i][j];}printf(""%d""s

const-下面的程序错在哪里?怎么改呀?

问题描述 下面的程序错在哪里?怎么改呀? char a[20]={'a','b','','c','d','','e','f'}; int i; for(i=0;i<20;i++) puts(a[i]); system("pause"); put(a[i])中a下面有红线错误提示. 错误提示为:错误 1 error C2664: "puts": 不能将参数 1 从"char"转换为"const char *" c:user

c++-这个程序错在哪了??求大神帮忙改正

问题描述 这个程序错在哪了??求大神帮忙改正 #include #include using namespace std; class Point { public: Point(int xx=0,int yy=0) { x=xx; y=yy; } Point(Point &p); int GetX() {return x;} int GetY() {return y;} private: int x,y; }; Point::Point(Point &p) { x=p.x; y=p.y;