c語言猴子選大王增強版,猴子選大王c語言pta

本文目錄一覽:

C 語言中關於猴子選大王的代碼

注釋寫得很清楚 相信你能看懂 #include stdio.h

#include stdlib.h

#define MAXSIZE 100

typedef struct Node

{

int data;//存儲猴子編號

struct Node *next;

}*List;

/* 用鏈表來得出大王的序號 */

int LinkedList(int num_monkey,int number);

/* 用順序表來得出大王的序號 */

int SequenceList(int num_monkey,int number);

/* 創建循環單鏈表 */

List CreateList(int n);

void main()

{

int m, n, way, king;

printf(“請輸入猴子個數:”);

scanf(“%d”, n);

printf(“請輸入要報的數:”);

scanf(“%d”, m);

while (1)

{

printf(“\n請選擇解決問題的方法:\n”);

printf(“1.單鏈表\n”);

printf(“2.順序表\n”);

scanf(“%d”, way);

if (way == 1)

{

king = LinkedList(n,m);

break;

}

else if (way == 2)

{

king = SequenceList(n,m);

break;

}

else

{

printf(“輸入不合法!\n”);

}

}

printf(“%d號猴子是大王\n”, king);

}

/* 創建循環單鏈表 */

List CreateList(int n)

{

int i;

List head, p;

head = (List)malloc(sizeof(struct Node));

head-next = head;

for (i = 1; i n; ++i)

{

p = (List)malloc(sizeof(struct Node));

p-next = head-next;

head-next = p;

}

p = head;

for (i = 0; i n; ++i)

{

p-data = i+1;

p = p-next;

}

return head;

}

/* 用鏈表來得出大王的序號 */

int LinkedList(int num_monkey,int number)

{

int i,j;

List head = CreateList(num_monkey);

List tail = head;//用來存儲最後一個節點的地址

List out,p;//out指向要淘汰的節點,p指向其前一個節點

/* 讓tail指向最後一個節點 */

for (i = 1; i num_monkey; i++)

{

tail = tail-next;

}

/* 淘汰的猴子個數比總個數少1,報數一輪就淘汰一個猴子,所以需要報數的輪數比

猴子總個數少1*/

for( i = 1; i num_monkey; i++ )

{

p = tail;

/* 讓p指向要淘汰的猴子的前一個 */

for ( j = 1; j number; j++ )

{

p = p-next;

}

out = p-next;

/* 如果最後一個猴子被淘汰就更新尾節點 */

if (out == tail)

{

tail = p;

}

p-next = out-next;

printf(“猴子%d淘汰\n”, out-data);

free(out);//刪除被淘汰猴子的節點

}

return p-data;

}

/* 用順序表來得出大王的序號 */

int SequenceList(int num_monkey,int number)

{

/* 用來表示個猴子的信息,如果猴子出局就存儲0,否則存儲1。第一個元素不使用 */

int monkey[MAXSIZE];

/* 用來表示出局的猴子的序號 */

int out = 1;

/* 用來表示當前猴子的個數 */

int num_now = num_monkey;

int i,j;

for (i = 0; i num_monkey+1; i++)

{ /* 開始將每個元素置1 */

monkey[i] = 1;

}

/* 報數次數比猴子個數少一 */

for (i = 1; i num_monkey; i++)

{

out = 1;

/* 報數整個過程 */

for (j = 0; j number; j++)

{

/* 如果序號數大於猴子個數,表示循環了一圈,那麼去掉那個圈數 */

if (out num_monkey)

out -= num_monkey;

/* 之前已經出局的猴子不參加報數 */

while(monkey[out] == 0)

{

out ++;

/* 如果序號數大於猴子個數,表示循環了一圈,那麼去掉那個圈數 */

if (out num_monkey)

out -= num_monkey;

}

out++;

}

out–;//報完數後out應該是被淘汰的猴子的下一個,所以要向前移動

monkey[out] = 0;

printf(“猴子%d淘汰\n”,out);

}

while(monkey[out] == 0)

{

out ++;

/* 如果序號數大於猴子個數,表示循環了一圈,那麼去掉那個圈數 */

if (out num_monkey)

out -= num_monkey;

}

return out;

}

C語言猴子選大王的問題?

因為你讓猴子的編號從0開始的。

head-num=0; ——雖然這一語句被注釋掉了,的num的值還是有的(隨機),但只要不是0(且它又沒有當上大王),就不影響運行。

猴子選大王,C語言描述 請相信解釋我的代碼!

給你原文做了注釋。還不懂hi我

#include stdio.h

#includemalloc.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(mn){printf(“m應該 大於n請重新輸入”);return 0 ;

}

L=InitList(L,m);

printf(“出列的順序為:”);

ListDelete_L( L,n);

return 0;

}

c語言鏈表問題,猴子選大王,哪位大神能幫我看看

#include stdio.h

#include stdlib.h

typedef int status;

typedef int ElemType;

typedef struct NODE_MONKY

{

ElemType serial_number;

struct NODE_MONKY *next;

}LNode, *LinkList;

void Build(LinkList L,int n){

LinkList p,q;

p = L;

for(int i=0;in;i++)

{

printf(“%d\n”,i+1);

q = (LinkList)malloc(sizeof(LNode));

q – serial_number = i+1;

q – next = NULL;

p – next = q;

p = q;

}

p – next = L-next;

}

void Print(LinkList L,int x)//計算單鏈表的長度,然後輸出單鏈表

{

    LinkList p;

    p=L-next;

    while(x–)

    {

        printf(“%d “,p-serial_number);

        p=p-next;

    }

}

void Delete(LinkList L,int x,int y)//刪除值為x的結點

{

    LinkList p,q;

p=L-next;

for (int i = 1; i  y; i++)

{

for(int j = 2; j  x ; j++)

{

p = p-next;

printf(“serial_number change = %d\n”,p-serial_number);

}

q = p-next;

        p-next = q-next;

        printf(“delete %d success\n”,q-serial_number);

        printf(“p-serial_number = %d\n”,p-serial_number);

        free(q);

        q = NULL;

        p = p-next;

        printf(“p-serial_number now = %d\n”,p-serial_number);

}

}

int main()

{

int m,n;

LinkList L,p,q;

L = (LinkList)malloc(sizeof(LNode));

L – next = NULL;

L – serial_number = 1;

printf(“please input the number of mounky.\n”);

scanf(“%d”,n);

Build(L,n);

Print(L,n);

printf(“Please input the number M\n”);

scanf(“%d”,m);

Delete(L,m,n);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279054.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:02
下一篇 2024-12-20 15:02

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論