C语言问题: 大家一起做游戏,帮忙改一下,谢谢!
题目:幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都...
题目:幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。
每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。
现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。
输入:
小朋友的个数(<=50) 要被练习的数字
输出:
最终被留下的小朋友的序号
说明:
如“要被练习的数字”是5,则每次数到5的同学要退出该游戏
#include <stdio.h>
int main()
{
int n,l,a[50];
int i,b=0,c=1;
scanf("%d%d",&n,&l);
for(i=0;i<n;i++)
a[i]=i+1;
do
{
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
if(c!=l)
c++;
else(a[i]=0,c=1,b++);
}
}
}
while(b<n-1);
for(i=0;i<n;i++)
if(a[i]!=0)
printf("The left child is NO %d.\n",a[i]);
} 展开
每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。
现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。
输入:
小朋友的个数(<=50) 要被练习的数字
输出:
最终被留下的小朋友的序号
说明:
如“要被练习的数字”是5,则每次数到5的同学要退出该游戏
#include <stdio.h>
int main()
{
int n,l,a[50];
int i,b=0,c=1;
scanf("%d%d",&n,&l);
for(i=0;i<n;i++)
a[i]=i+1;
do
{
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
if(c!=l)
c++;
else(a[i]=0,c=1,b++);
}
}
}
while(b<n-1);
for(i=0;i<n;i++)
if(a[i]!=0)
printf("The left child is NO %d.\n",a[i]);
} 展开
6个回答
展开全部
下面是约瑟夫环问题,和你提问的类似
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef char ElemType;
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front ;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q)
{//构造一个空队列Q
Q.front =Q.rear=(QueuePtr)malloc(sizeof(QNode));
if (!Q.front)exit (OVERFLOW);
Q.front->next=NULL;
return OK;
}
Status InitList_Sq(SqList &L)//构造空的线性顺序表
{
L.elem =(ElemType*)malloc(100*sizeof(ElemType));
if(!L.elem )
exit(OVERFLOW);
L.length =0;
L.listsize =STACK_INIT_SIZE ;
return OK;
}
Status EnQueue(LinkQueue &Q,ElemType e)
{//插入元素e为Q的新的队尾元素
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if (!p)exit (OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
//Status inputList(SqList &L)
//{
// int i=0;
// scanf("%lf",&L.elem[i]);
// L.length++;
// i++;
// return OK;
//}
Status printfQueue(LinkQueue Q)
{
while(Q.front !=Q.rear)
{
printf("%lf",Q.front->next->data);
printf(" ");
}
Q.front=Q.front->next;
return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e)//在第i个位置之前插入新的元素。
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length +1)
return ERROR;
if(L.length >=L.listsize )
{
newbase=(ElemType *)realloc(L.elem ,(L.listsize +10)*sizeof(ElemType ));
if(!newbase)
exit(OVERFLOW);
L.elem =newbase;
L.listsize +=STACKINCREMENT ;
}
q=&(L.elem [i-1]);
for(p=&(L.elem [L.length -1]);p>=q;--p)
*(p+1)=*(p);
*q=e;
++L.length ;
return OK;
}
Status josephList(SqList L,LinkQueue &Q,int m)
{
int j;
if (m<=0)return ERROR;
else if (L.length<m)
{
int n=0;
int i;
int k;
for(j=2;j<=m;j++)
{ i=0;
if (n=L.length-1)
{
i=0;
n=0;
}
else
{
i++;
n++;
}
}
EnQueue(Q,L.elem[i]);
m=L.elem[i];
for (k=n;k<=L.length-2;k++)
L.elem[k]=L.elem[k+1];
L.elem[L.length-1]=NULL;
L.length--;
}
else
{
int n=0,i=0,k;
for(j=2;j<=m;j++)
{
i++;
n++;
}
EnQueue(Q,L.elem[i]);
m=L.elem[i];
for (k=n;k<=L.length-2;k++)
L.elem[k]=L.elem[k+1];
L.elem[L.length-1]=NULL;
L.length--;
}
josephList(L,Q,m);
return OK;
}
void main ()
{
LinkQueue Q;
int i=0;
int m,n=3;
int a[3];
SqList L;
InitQueue(Q);
InitList_Sq(L);
printf("请输入m的值:");
scanf("%d",&m);
printf("请输入密码:");
for (i=0;i<n;i++)
{
scanf("%d",a[i]);
//ListInsert_Sq(L, i,a[i]);
}
printf("测验1");
for (i=0;i<n;i++)
{ListInsert_Sq(L, i,a[i]);
}
printf("测验");
josephList( L,Q, m);
printf("输出结果为:");
printfQueue(Q);
}
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef char ElemType;
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front ;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q)
{//构造一个空队列Q
Q.front =Q.rear=(QueuePtr)malloc(sizeof(QNode));
if (!Q.front)exit (OVERFLOW);
Q.front->next=NULL;
return OK;
}
Status InitList_Sq(SqList &L)//构造空的线性顺序表
{
L.elem =(ElemType*)malloc(100*sizeof(ElemType));
if(!L.elem )
exit(OVERFLOW);
L.length =0;
L.listsize =STACK_INIT_SIZE ;
return OK;
}
Status EnQueue(LinkQueue &Q,ElemType e)
{//插入元素e为Q的新的队尾元素
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if (!p)exit (OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
//Status inputList(SqList &L)
//{
// int i=0;
// scanf("%lf",&L.elem[i]);
// L.length++;
// i++;
// return OK;
//}
Status printfQueue(LinkQueue Q)
{
while(Q.front !=Q.rear)
{
printf("%lf",Q.front->next->data);
printf(" ");
}
Q.front=Q.front->next;
return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e)//在第i个位置之前插入新的元素。
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length +1)
return ERROR;
if(L.length >=L.listsize )
{
newbase=(ElemType *)realloc(L.elem ,(L.listsize +10)*sizeof(ElemType ));
if(!newbase)
exit(OVERFLOW);
L.elem =newbase;
L.listsize +=STACKINCREMENT ;
}
q=&(L.elem [i-1]);
for(p=&(L.elem [L.length -1]);p>=q;--p)
*(p+1)=*(p);
*q=e;
++L.length ;
return OK;
}
Status josephList(SqList L,LinkQueue &Q,int m)
{
int j;
if (m<=0)return ERROR;
else if (L.length<m)
{
int n=0;
int i;
int k;
for(j=2;j<=m;j++)
{ i=0;
if (n=L.length-1)
{
i=0;
n=0;
}
else
{
i++;
n++;
}
}
EnQueue(Q,L.elem[i]);
m=L.elem[i];
for (k=n;k<=L.length-2;k++)
L.elem[k]=L.elem[k+1];
L.elem[L.length-1]=NULL;
L.length--;
}
else
{
int n=0,i=0,k;
for(j=2;j<=m;j++)
{
i++;
n++;
}
EnQueue(Q,L.elem[i]);
m=L.elem[i];
for (k=n;k<=L.length-2;k++)
L.elem[k]=L.elem[k+1];
L.elem[L.length-1]=NULL;
L.length--;
}
josephList(L,Q,m);
return OK;
}
void main ()
{
LinkQueue Q;
int i=0;
int m,n=3;
int a[3];
SqList L;
InitQueue(Q);
InitList_Sq(L);
printf("请输入m的值:");
scanf("%d",&m);
printf("请输入密码:");
for (i=0;i<n;i++)
{
scanf("%d",a[i]);
//ListInsert_Sq(L, i,a[i]);
}
printf("测验1");
for (i=0;i<n;i++)
{ListInsert_Sq(L, i,a[i]);
}
printf("测验");
josephList( L,Q, m);
printf("输出结果为:");
printfQueue(Q);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdio.h"
#include "conio.h"
void printArray(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%2d ",a[i]);
}
printf("\n");
}
main()
{
int student[50];
int n=0,count=0,number=0,i,j;
printf("请输入*数和间隔*数:\n");
scanf("%d,%d",&number,&n);
for(i=1;i<=50;i++)
{
student[i-1]=i;
}
i=0;
while(number>1)
{
count=1;
while(count<=n-1)
{
i++;
count++;
if(i>=number)
{
i=i%number;
}
}
printf("第%d 个出列 ",student[i]);
for( j=i+1;j<number;j++)
{
student[j-1]=student[j];
}
number--;
printArray(student,number);
}
printf("最后剩下的编号:%d",student[0]);
getch();
}
请输入人数和间隔:
10,3
第3 个 1 2 4 5 6 7 8 9 10
第6 个 1 2 4 5 7 8 9 10
第9 个 1 2 4 5 7 8 10
第2 个 1 4 5 7 8 10
第7 个 1 4 5 8 10
第1 个 4 5 8 10
第8 个 4 5 10
第5 个 4 10
第10 4
最后剩下的编号:4
#include "conio.h"
void printArray(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%2d ",a[i]);
}
printf("\n");
}
main()
{
int student[50];
int n=0,count=0,number=0,i,j;
printf("请输入*数和间隔*数:\n");
scanf("%d,%d",&number,&n);
for(i=1;i<=50;i++)
{
student[i-1]=i;
}
i=0;
while(number>1)
{
count=1;
while(count<=n-1)
{
i++;
count++;
if(i>=number)
{
i=i%number;
}
}
printf("第%d 个出列 ",student[i]);
for( j=i+1;j<number;j++)
{
student[j-1]=student[j];
}
number--;
printArray(student,number);
}
printf("最后剩下的编号:%d",student[0]);
getch();
}
请输入人数和间隔:
10,3
第3 个 1 2 4 5 6 7 8 9 10
第6 个 1 2 4 5 7 8 9 10
第9 个 1 2 4 5 7 8 10
第2 个 1 4 5 7 8 10
第7 个 1 4 5 8 10
第1 个 4 5 8 10
第8 个 4 5 10
第5 个 4 10
第10 4
最后剩下的编号:4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
未考虑:L=1的情况
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |