C语言经典例69-有n个人围成一圈报数问题
生活随笔
收集整理的這篇文章主要介紹了
C语言经典例69-有n个人围成一圈报数问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
- 1 題目
- 2 分析
- 3 實(shí)現(xiàn)
- 4 運(yùn)行結(jié)果
1 題目
有n個(gè)人圍成一圈,順序排號(hào)。從第一個(gè)人開(kāi)始報(bào)數(shù)(從1到3報(bào)數(shù)),凡報(bào)到3的人退出圈子,問(wèn)最后留下的是原來(lái)第幾號(hào)的那位。
2 分析
假設(shè)全部人都退圈,則最后一個(gè)退圈的人就是題目中留下的那一位,詳細(xì)思路請(qǐng)見(jiàn)實(shí)現(xiàn)中的注釋。
3 實(shí)現(xiàn)
#include <stdio.h>int main() {int a[100]; // 保存人數(shù)的數(shù)組int n; // 用戶(hù)輸入初始有多少人int i; // 循環(huán)控制變量int k = 0; // 統(tǒng)計(jì)一共有多少人退圈,初始為0int count = 0; // 每輪報(bào)號(hào)累加數(shù)int lastone; // 記錄每輪退圈的人的號(hào)碼printf("請(qǐng)輸入人數(shù):");scanf("%d", &n); //n為人數(shù)//對(duì)于每個(gè)人a[i], 他的編號(hào)實(shí)際上是i+1for (i = 0; i < n; i++) {// i表示人的狀態(tài),若a[i]=1,則表示i+1號(hào)在圈內(nèi)// 若a[i]=0,則表示i+1號(hào)在圈外,初始所有人都在圈內(nèi)a[i] = 1;}// 當(dāng)所有人都退出圈子時(shí)停止循環(huán)// 最后退圈的人就是題中有一個(gè)留在圈內(nèi)的那個(gè)人while (k < n) {//對(duì)所有編號(hào)開(kāi)始循環(huán)for (i = 0; i < n; i++) {//判斷i+1號(hào)是否在圈內(nèi)if (a[i] == 1) {//若在圈內(nèi),則報(bào)號(hào)count++; //判斷號(hào)碼是否為3的倍數(shù)if (count % 3 == 0) {a[i] = 0; //若是3的倍數(shù),則a[i]出圈k++; //退圈人數(shù)+1lastone = i + 1; //記錄此時(shí)退圈人的號(hào)碼}}}}//將最后退圈的人的號(hào)碼輸出printf("留下來(lái)的那個(gè)是%d號(hào)\n", lastone); }4 運(yùn)行結(jié)果
PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF } 請(qǐng)輸入人數(shù):8 留下來(lái)的那個(gè)是7號(hào) PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF } 請(qǐng)輸入人數(shù):20 留下來(lái)的那個(gè)是20號(hào) PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF } 請(qǐng)輸入人數(shù):17 留下來(lái)的那個(gè)是11號(hào)總結(jié)
以上是生活随笔為你收集整理的C语言经典例69-有n个人围成一圈报数问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言经典例68-数组元素循环偏移
- 下一篇: C语言经典例71-编写函数输出结构体数据