找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2028|回復: 0
打印 上一主題 下一主題
收起左側

C語言的算法:報數(shù)游戲程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:1040469 發(fā)表于 2022-10-12 09:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
學技術,重在日拱一卒,一點一滴的積累。


今天,我們一起來分析C語言的算法:報數(shù)游戲。


算法:假設一共有n個人玩游戲,編號分別為1~n,手動輸入一個小于n的數(shù)w,則從1開始查數(shù),當數(shù)到w的時候,則此編號的人退出游戲,然后下一個人重新開始從1報數(shù),,直到所有人都退出游戲,求退出玩家的編號依次為什么?

例如:有5人玩游戲,w為2,則退出順序為2 4 1 5 3。



編程思路


編程思路:


1、根據(jù)題目要求,需要輸入兩個數(shù)n和m,當每次到m的時候,就有人退出,然后再重新開始報數(shù)1~m。

2、可以通過要求,理解為將1~n編號從1開始循環(huán),到m之后對應編號退出,再重新開始循環(huán),那么為了達到以上目的,可以通過設置鏈表的方式來存儲編號,同時將鏈表的首位連接,構成閉環(huán)的鏈表。

3、通過閉環(huán)的鏈表,我們就可以不斷的循環(huán)n次,在每次循環(huán)里面再循環(huán)m次,每次退出一人,然后在while循環(huán)中執(zhí)行n減減操作,直到所有人退出完畢,結束循環(huán)。


程序范例
#include <stdio.h>

#include <stdlib.h>

struct ele

{

  int no;

  struct ele *link;

};

int n,m,i;

main()

{

  struct ele *h,*u,*p;

  system("cls");

  printf("請輸入 n (一共有多少人完游戲)和 m(報幾個數(shù)出去一個人):\n");

  scanf("%d%d",&n,&m);

  h=u=(struct ele *)malloc(sizeof(struct ele));

  h->no=1;

  for(i=2;i<=n;i++)

  {

    u->link=(struct ele *)malloc(sizeof(struct ele));

    u=u->link;

    u->no=i;

  }

  u->link=h;

  puts("\n依次退出循環(huán)的人數(shù)是:");


while(n)

{

  for(i=1;i<m;i++)

  u=u->link;

  p=u->link;

  u->link=p->link;

  printf("%4d",p->no);

  free(p);

  n--;

}

printf("\n\n Press any key to quit...\n");

getch();

}

程序運行結果:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表