當前位置:首頁 » 編程語言 » c語言選大王游戲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言選大王游戲

發布時間: 2022-05-09 12:10:44

c語言描述怎麼用循環隊列實現猴子選大王

#include<stdio.h>
#include<stdlib.h>
typedefstructnode//定義鏈表節點類型
{
intdata;
structnode*next;
}linklist;
intmain()
{
inti,n,k,m,total;
linklist*head,*p,*s,*q;
printf("請輸入猴子總數:");//讀入問題條件
scanf("%d",&n);
printf("請輸入開始計數的猴子數:");
scanf("%d",&k);
printf("請輸入數:");
scanf("%d",&m);
head=(linklist*)malloc(sizeof(linklist));//創建循環鏈表,頭節點也存信息
p=head;
p->data=1;
p->next=p;
for(i=2;i<=n;i++)//初始化循環鏈表
{
s=(linklist*)malloc(sizeof(linklist));
s->data=i;
s->next=p->next;
p->next=s;
p=p->next;
}
p=head;
for(i=1;i<k;i++)//找到第k個節點
{
p=p->next;
}
total=n;//保存節點總數
printf(" 失序:");
q=head;
while(total!=1)//只剩一個節點時停止循環
{
for(i=1;i<m;i++)//報數過程,p指向要刪除的節點
{
p=p->next;
}
printf("[%d]",p->data);//列印要刪除的節點序號
while(q->next!=p)//q指向p節點的前驅
{
q=q->next;
}
q->next=p->next;//刪除p節點
s=p;//保存被刪除節點指針
p=p->next;//p指向被刪除節點的後繼
free(s);//釋放被刪除的節點
total--;//節點個數減一
}
printf(" 猴子王是第[%d]只 ",p->data);//列印最後剩下的節點序號
free(p);
system("pause");
return0;
}

⑵ 有N只猴子選大王,選舉的辦法是:排成一排,從頭到尾報數,報到3的倍數(

這個是C語言編寫,
題目是輸入兩個正整數 n 和 m( (1<m<n<=50)),有 n 個人圍成一圈,按順序從 1 到 n 編號。從第一個人開始報數,報數 m 的人退出圈子,下一個人從 1 開始重新報數,報數 m 的人退出圈子。如此循環,直到留下最後一個人。請按退出順序輸出退出圈子的人的編號,以及最後一個人的編號。
提示:將每個人的編號存入數組,從第一個人開始報數,輸出報數 m 的人的編號,並將該編號清除為0,重復這樣的操作直至只剩下一個不為0的數,該數就是最後一個人的編號。
輸出使用語句:printf("No%d: %d\n", no, *p);
可以計算無限次,每次都有時間
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define MAX 100000
typedef struct node
{
int data;
struct node *next;
}Node;
typedef Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
clock_t start, stop;

void init(List *L) //initilize the list L
{
*L=(Node*)malloc(sizeof(Node));
(*L)->data=-1;
(*L)->next=NULL;
}

void insert(Position p,int x){// insert the elemnet x after the position of p
PtrToNode q,r;
q=(Node*)malloc(sizeof(Node));
q->data=x;
r=p->next;
q->next=r;
p->next=q;
}

void delect(Position p){// delect the element after p
PtrToNode tmp;
tmp=p->next;
p->next=tmp->next;
free(tmp);
}

void MakeList(List *L,int n){//make the list
int i;
Position p=L;
for(i=1;i<=n;i++){
insert(p,i);
p=p->next;
}
}

void main()
{
int i,j,n,m;
Position p,q,r;
List L;
double ration;
while(scanf("%d%d",&n,&m)!=EOF){//input the number to slect
if(n>MAX){
printf("The number is too large!\n");
continue;
}
init(&L);//initilze the list
MakeList(L,n);//make the list
start = clock();
q=p=L->next;// p and q are the first position of the list
for(i=0;i<n;i++){

for(j=1;j<m-1;j++){//find the porper position of p
p=p->next;
if(p==NULL)p=q;
}
r=p->next; // r is the position of the element we select
if(r==NULL)r=q;

if(i!=n-1)printf("No%d: %d\n", i+1, r->data);//print the element
else printf("Last No is: %d\n",r->data);

if(p->next==NULL){
delect(L);
q=L->next;//delect the position of p->next
}
else delect(p);
p=p->next;
if(p==NULL)p=q;
}
stop = clock();
ration = ((double)(stop - start))/CLK_TCK;
printf("The time is %f\n",ration);
}
}

⑶ C語言 猴子選大王 高手糾錯啊。。。。。。

#include<stdio.h>
#include<malloc.h>
int main()
{
struct king{
int data;
struct king *next;
};
int i,m,n;
scanf("%d%d",&n,&m);
struct king *p,*head,*t,*tmp;
head=(struct king*)malloc(sizeof(struct king));
head->next=NULL;
head->data=1;
p=head; //循環鏈表
for (i=2;i<=n;i++)
{
t=(struct king*)malloc(sizeof(struct king));
t->data=i;
t->next=NULL;
p->next=t;
p=p->next;
}
p->next=head;
p=head; //刪除鏈表
while(p->next!=p)
{
for(i=1;i<m-1;i++)
p=p->next;
tmp=p->next;
p->next=p->next->next;
p=tmp->next;
free(tmp);

}
printf("%d",p->data);
getchar();
getchar();
return 0;
}

//
p=tmp->next;

你那個是指向下下個節點了

⑷ 【急求】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語言從入門到精通實例版》 和《 c語言從入門到精通》 內容上有什麼區別

實例版注重從實例中總結編程經驗,後者則強調編程原理的理解
《C語言從入門到精通》以零基礎講解為宗旨,用實例引導讀者深入學習,採取「基礎知識→核心技術→趣味題解→項目實戰」的講解模式,深入淺出地講解C語言的各項技術及實戰技能。《C語言從入門到精通》第1篇【基礎知識】主要講解步入C的世界、常量與變數、數據類型、運算符和表達式、程序控制結構和語句、輸入和輸出、數組與字元串、演算法與流程圖等;第2篇【核心技術】主要講解C語言中的函數、函數中的變數、指針、指針進階、文件、編譯與預處理指令、庫函數、位運算、結構體和聯合體、數據結構等;第3篇【趣味題解】主要講解哥德巴赫猜想、猴子選大王游戲、迷宮求解、背包問題求解、火車車廂重排、哈夫曼編碼的實現、8皇後問題的實現、商人過河游戲、K階斐波那契序列的實現、最短路徑的實現等經典數據結構問題的解決;第4篇【項目實戰】主要講解實戰前的項目規劃以及5個項目的實戰開發,包括通訊錄、圖書管理系統、簡易網路通信系統、學生成績管理系統、酒店管理系統等;第5篇【王牌資源】在DVD光碟中贈送了豐富的資源,諸如C語言標准庫函數查詢手冊、C語言常用查詢手冊、C源碼大放送、《C語言從入門到精通》【練一練】答案、C程序員職業規劃、全國計算機等級考試二級C考試大綱及應試技巧、C程序員面試技巧、C常見面試題、C常見錯誤及解決方案、C開發經驗及技巧大匯總等。
另外光碟中還包含37小時的全程同步視頻教學錄像及7小時的指導錄像(包括《C語言從入門到精通)》各章上機指導錄像及所有範例運行指導錄像)。
《C語言從入門到精通》適合任何想學習C語言的人員,無論您是否從事計算機相關行業、是否接觸過C語言,通過學習,均可快速掌握C語言的開發方法和技巧。《C語言從入門到精通(實例版)》從初學者的角度出發,通過通俗易懂的語言,豐富多彩的實例,詳細介紹了使用Visual C++ 6.0(部分使用Turbo C)進行C語言應用程序開發應該掌握的各方面技術。全書共分14章,包括初識C語言、C語言基礎、順序與選擇結構程序設計、循環控制、數組、函數、指針、結構體與共用體、演算法、位運算、預處理、文件、圖形圖像、商品信息管理系統。書中所有知識都結合具體實例進行介紹,涉及的程序代碼給出了詳細的注釋,可以使讀者輕松領會C語言應用程序開發的精髓,快速提高開發技能。另外,本書除了紙質內容之外,配書光碟中還給出了海量開發資源庫,主要內容如下:
 語音視頻講解:總時長17小時,共193段  實例資源庫:881個實例及源碼詳細分析
 模塊資源庫:15個經典模塊開發過程完整展現  項目案例資源庫:15個企業項目開發過程完整展現
 測試題庫系統:616道能力測試題目  面試資源庫:371個企業面試真題
 PPT電子教案

⑹ 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");
}
試試...