標題: C語言的算法:報數(shù)游戲程序 [打印本頁]

作者: XYDDD    時間: 2022-10-12 09:16
標題: C語言的算法:報數(shù)游戲程序
學(xué)技術(shù),重在日拱一卒,一點一滴的積累。


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


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

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



編程思路


編程思路:


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

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

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

}

程序運行結(jié)果:






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1