|
學(xué)技術(shù),重在日拱一卒,一點(diǎn)一滴的積累。
今天,我們一起來(lái)分析C語(yǔ)言的算法:報(bào)數(shù)游戲。
算法:假設(shè)一共有n個(gè)人玩游戲,編號(hào)分別為1~n,手動(dòng)輸入一個(gè)小于n的數(shù)w,則從1開(kāi)始查數(shù),當(dāng)數(shù)到w的時(shí)候,則此編號(hào)的人退出游戲,然后下一個(gè)人重新開(kāi)始從1報(bào)數(shù),,直到所有人都退出游戲,求退出玩家的編號(hào)依次為什么?
例如:有5人玩游戲,w為2,則退出順序?yàn)? 4 1 5 3。
編程思路
編程思路:
1、根據(jù)題目要求,需要輸入兩個(gè)數(shù)n和m,當(dāng)每次到m的時(shí)候,就有人退出,然后再重新開(kāi)始報(bào)數(shù)1~m。
2、可以通過(guò)要求,理解為將1~n編號(hào)從1開(kāi)始循環(huán),到m之后對(duì)應(yīng)編號(hào)退出,再重新開(kāi)始循環(huán),那么為了達(dá)到以上目的,可以通過(guò)設(shè)置鏈表的方式來(lái)存儲(chǔ)編號(hào),同時(shí)將鏈表的首位連接,構(gòu)成閉環(huán)的鏈表。
3、通過(guò)閉環(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("請(qǐng)輸入 n (一共有多少人完游戲)和 m(報(bào)幾個(gè)數(shù)出去一個(gè)人):\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();
}
程序運(yùn)行結(jié)果:
1.jpg (24.63 KB, 下載次數(shù): 79)
下載附件
2022-10-12 09:16 上傳
|
|