当前位置:首页 » 编程语言 » 猴子大王C语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

猴子大王C语言

发布时间: 2022-08-30 16:56:04

㈠ 【急求】c语言 猴子选大王的问题 应该很简单

以前做的约瑟夫环,改改就能用
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

struct MAN {
int RANK;
int CODE;
struct MAN * nextptr;
};

typedef struct MAN MAN;
typedef MAN * MANPTR;

void tittle();/**/
void begin();/**/

void printlink(MANPTR startptr);/**/
bool isempty(MANPTR startptr);/**/
void setfree(MANPTR *startptr );/**/

void insert(int sequence,int number,MANPTR *startptr);/**/

int main()
{
MANPTR startptr = NULL;
int code;
char choice;
char elsechar;
char elsechar2;
int number,sequence,i;
MANPTR currentptr,preptr,timeptr;

tittle();
begin();
scanf("%c%c",&choice,&elsechar);
if(elsechar!='\n'){
printf("\tTry to enter again\n");
elsechar2=getchar();
while(elsechar2!='\n'){elsechar2=getchar();}
}/*check cahr*/

while(choice!='3'||elsechar!='\n'){
if(elsechar=='\n'){
switch(choice){
/*创建游戏*********************************************************** 添加链表--->常规*/
case '1':
setfree(&startptr);
sequence=1;

printf("Enter intiger,and enter -1 to end \n");
scanf("%d",&number);

while(number!=-1)
{
insert(sequence,number,&startptr);
sequence++;

scanf("%d",&number);
}

getM:
printf("Enter the value of M : \n");
scanf("%d",&code);
if(code<=0){
printf("\n\tM should lager than zero.\n");
goto getM;
}

printlink(startptr);

getchar();
break;
/*******************************************************************************************/

/*开始游戏****** 链表最后--->连接到start--->||start开始数,运行||--->断开链表*/
case '2':
if(isempty(startptr)){
printf("\n\tGame has not be created!\n");
break;
}

printf("The order to quit is : \n");

preptr=NULL;
currentptr=startptr;
while(currentptr!=NULL){
preptr=currentptr;
currentptr=currentptr->nextptr;
}
preptr->nextptr=startptr;

//preptr=NULL;
currentptr=startptr;
i=0;
while(i==0){
while(code>1){
code--;
preptr=currentptr;
currentptr=currentptr->nextptr;
}

if(preptr==currentptr->nextptr){i=1;}

timeptr=currentptr;
code=currentptr->CODE;
printf("%d ",currentptr->RANK);

preptr->nextptr=currentptr->nextptr;
currentptr=currentptr->nextptr;

free(timeptr);
}
printf("%d",preptr->RANK);

/* currentptr=startptr;
while(currentptr->nextptr->RANK != 1){currentptr=currentptr->nextptr;}
currentptr->nextptr=NULL;*/
//printlink(startptr);
//setfree(&startptr);
//printlink(startptr);
break;
/*********************************************************************************************/

default:
printf("\tTry to enter again\n");
break;
}
}
begin();
scanf("%c%c",&choice,&elsechar);
if(elsechar!='\n'){
printf("\tTry to enter again\n");
elsechar2=getchar();
while(elsechar2!='\n'){elsechar2=getchar();}
}/*check char*/
}

printf("\tEnd");
getchar();
return 0;
}
void tittle()
{
printf("\n*************************\n");
printf("*\t约瑟夫环游戏\t*\n");
printf("*************************\n");
}

void begin()
{
printf("\n1.创建游戏。\n2.开始游戏。\n3.结束游戏。\n");
}

bool isempty(MANPTR startptr)
{
return startptr == NULL;
}

void printlink(MANPTR startptr)
{
if(startptr==NULL){printf("The game has not be created");}
else{
printf("The order is : \n");
while(startptr != NULL){
printf("%d (%d) ---> ",startptr->CODE,startptr->RANK);
startptr = startptr->nextptr;
}
printf("StartOne\n\n");
}
}

void setfree(MANPTR *startptr )
{
MANPTR timeptr;

while(*startptr != NULL){
timeptr=*startptr;
*startptr=(*startptr)->nextptr;
free(timeptr);
}
}/*MANPTR *startptr */

void insert(int sequence,int number,MANPTR *startptr)
{
MANPTR newptr;
MANPTR preptr;
MANPTR currentptr;

newptr = (MANPTR)malloc(sizeof(MAN));

if(newptr!=NULL){
newptr->CODE = number;
newptr->RANK = sequence;
newptr->nextptr=NULL;
//printf("%d",number);
preptr=NULL;
currentptr=*startptr;

while(currentptr!=NULL){
preptr=currentptr;
currentptr=currentptr->nextptr;
}

if(preptr==NULL){*startptr=newptr;}
else{preptr->nextptr=newptr;}
}

else{printf("No memory available!When insert %c",number);}
}

㈡ 猴子选王问题-(c语言编程)

这是典型的约瑟夫环的问题

#include <stdio.h>
int main(void)
{
int n=100, m=3, i, s=0;
for (i=2; i<=n; i++)
s=(s+m)%i;
printf ("最后留下的是原来第%d号\n", s+1);
}

㈢ 猴子选大王,C语言描述 请相信解释我的代码!

给你原文做了注释。还不懂hi我
#include <stdio.h>
#include<malloc.h>
typedef struct LNode
{
int num;
struct LNode *next;
}LNode, *LinkList; //定义结点
LinkList InitList(LinkList L,int n) //初始化循环链表
{
LinkList p,q;
int i;
L = (LinkList)malloc(sizeof(LNode)); //头结点
L->num = 1; //一号猴子
q=L;
for(i = 2; i <= n; i++) //从二号猴子开始生成结点
{
p = (LinkList)malloc(sizeof(LNode));
p->num = i;
q->next=p;
q=p;
}
q->next = L; //使链表循环起来
return L;
}
void ListDelete_L(LinkList L,int n)
{
LinkList p,q;
int j=1; //j为计数器
p=L;

while(p->next!=p) //p->next=p时是只剩一个结点。
{
while(j!=n-1) //当j=n-1时应该将该结点的下一个结点删除。当就j!=n-1时就应该指针向后移,同时计数器加一
{
p=p->next;
j++;
}
q=p->next; //q即为被点到的猴子
p->next=p->next->next; //删除q结点
printf("%d\n",q->num);
free(q);//释放
j=0; //计数器清零,重新开始计数
}
printf("%d",p->num);//此时的结点就是大王
free(p);
}
int main()
{
LinkList L=NULL;
int n,m,e=0;
printf("请输入猴子个数:");
scanf("%d",&m);
printf("请输入n值:");
scanf("%d",&n);
if(m<n){printf("m应该 大于n请重新输入");return 0 ;
}
L=InitList(L,m);
printf("出列的顺序为:");
ListDelete_L( L,n);
return 0;
}

㈣ C语言猴子选大王问题,求指出错误

把while(n<17)改为while(n<16),同时把
if(i==16)
i=0;
i++;改为
i++;
if(i==17)
i=0;

㈤ C语言程序设计,猴子选大王

#include<stdio.h>
#include<stdlib.h>
main()
{ int a[50];
int i,j,M,N,t=0;
printf("input two number.\n");
scanf("%d %d",&N,&M);
for(i=0;i<N;i++)
a[i]=i+1;
for(j=1,i=0;;j++,i++)
{
if(i==N)i=0;
if(a[i]==0){j--;continue;}
if(j%M==0){a[i]=0;t++;}
if(N-t==1)break;
}
for(i=0;i<N;i++)
if(a[i]!=0) printf("猴王是第%d个.\n",a[i]);
system("pause");
}
试试...

㈥ C语言猴子选大王的问题

因为你让猴子的编号从0开始的。
head->num=0; ——虽然这一语句被注释掉了,的num的值还是有的(随机),但只要不是0(且它又没有当上大王),就不影响运行。

㈦ C语言编的约瑟夫问题(猴子选大王)求大神看哪里错了

for(k=0;k<n;k++){
if(sz[k]==1){
s=s+1;
if(s==m){
sz[k]=0,s=0,b=b+1;}}
if(k==n-1){
k=0;}
if(b==n-1){break;}
}
改成:
k=0;
while(b<n-1)
{
if(sz[k]==1)
{
s=s+1;
if(s==m){sz[k]=0;s=0;b=b+1;}
}
k++;
if(k==n-1){k=0;}
}

㈧ 求c语言的“猴子选大王”代码

#include"stdio.h"
#include"stdlib.h"

typedef struct lnode{
int number;//猴子序列号
struct lnode *next;
}*linklist;

void creatlist(linklist &l,int number){
int i;
linklist p;
p=(linklist)malloc(sizeof(lnode));
l=(linklist)malloc(sizeof(lnode));
p->number=1;
l->next=p;
for(i=2;i<=number;i++){
p->next=(linklist)malloc(sizeof(lnode));
p=p->next;
p->number=i;
}
p->next=l->next;
}

int choice(){
linklist l,p;
int n;/*删除序号,哪个猴子数到该序号,就将哪个猴子剔除*/
int m;/*猴子总数,共有多少猴子玩这个游戏*/
int i;/*循环控制变量*/
int j=1;
printf("请输入猴子的数目(m):");
scanf("%d",&m);
creatlist(l,m);
p=l;
printf("请输入删除序号(n):");
scanf("%d",&n);
for(i=1;i<m;i++){
while(j%n){
p=p->next;
j++;
}
p->next=p->next->next;
j++;
}
return p->next->number;
}

void main(){
printf("猴王为:%d号猴子!\n",choice());
getchar();
getchar();
}

//注意:上述程序应在c++环境中运行