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]);
}
}
不知道哪里错了, 展开
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]);
}
}
不知道哪里错了, 展开
2个回答
展开全部
#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]);
}
}
#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]);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询