C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因

题目:15个红球和15个绿球排成一圈,从第一个开始数,当数到第8个球时就拿出此球,然后从下一个球开始数;当再数到8时又取出此球,如此循环,直到仅剩15个球为止。问:如何安... 题目:

15个红球和15个绿球排成一圈,从第一个开始数,当数到第8个球时就拿出此球,然后从下一个球开始数;当再数到8时又取出此球,如此循环,直到仅剩15个球为止。问:如何安排这30个球的顺序才能保证取出的球都是红球。(本题类似于“约瑟夫环”,与以前的题目不同的是:以前是知道每个球的下标,现在是不知道,需要通过最后的输出来倒推红球的下标。即逆向思考)。
函数原型如下: void PaiLie(int a[ ],int num1,int num2,int count)
其中num1、num2值均为15,count的值为8。

我的答案:
#include<stdio.h>
#define N 30
void PaiLie(int *p ,int count)
{
int a[N]={0},b[N],*q;
q=a,p=b;
int m=0,n=0,i=0;
while(m<=15)
{
if(*(q+i)=0)
n++;
if(n=count)
{
*(q+i)=1;
m++;
}
i++;
if(i=N)
i=0;
}
m=0;
q=a;
i=0;
while(m<=15)
{
while(*(q+i)=1)
*p++=i;
m++;
}
}
void main()
{
int b[N],count,i;
printf("Input the number:\n");
scanf("%d",&count);
PaiLie(b,count);
for(i=0;i<15;i++)
{
printf("%d",b[i]);
}
}

不知道哪里错了,
展开
 我来答
玻璃麦田bd
2013-06-25 · TA获得超过451个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:271万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void PaiLie(int a[ ],int num1,int num2,int count)
{
int i=0;
int j=0;
int selectCnt = 0;
int number = num1+num2;
while(selectCnt<num1)
{
while(1)
{
if(a[i]==0)
{
j++;
if(j == count)
{
a[i]=1;
j=0;
selectCnt++;
break;
}
}
i = (i+1)%number;
}
}
}
void main()
{
int num1,num2,count,i,size;
int *b = NULL;
printf("输入红色的球量:");
scanf("%d",&num1);
printf("\n输入绿色的球量:");
scanf("%d",&num2);
printf("\n输入取球间隔:");
scanf("%d",&count);

size = (num1+num2)*sizeof(int);
b = (int *)malloc(size);
memset(b,0,size);
PaiLie(b,num1,num2,count);

printf("\n\n应按如下次序排列,其中1代表红球,0代表绿球:");
for(i=0;i<num1+num2;i++)
{
if(i%10 ==0)
{
printf("\n");
}

printf("%d, ",b[i]);
}
}
百度网友afad00e
2013-06-26
知道答主
回答量:20
采纳率:0%
帮助的人:16.7万
展开全部
思路没什么大错,主要是判断语句中的等值判断应该用“==”,而不是用赋值“=”,如:if(*(q+i)=0)应改为 if(*(q+i)==0),if(n=count)应改为if(n==count)。另外,“if(i=N) i=0;”应该删掉。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式