>[info]有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。
~~~C
#include <stdio.h>
void main()
{
int num[50],n,*p,j,loop,i,m,k;
printf("請輸入這一圈人的數量:\n");
scanf("%d",&n);
p=num;
//開始給這些人編號
for (j=0;j<n;j++)
{
*(p+j)=j+1;
}
i=0;//i用于計數,即讓指針后移
m=0;//m記錄退出圈子的人數
k=0;//k報數1,2,3
while(m<n-1)//當退出的人數不大于總人數時,即留下的人數至少是一個人
//這句不能寫成m<n,因為假設有8人,當退出了6人時,此時還是進行人數退出,即m++,
//這時是7<8,剩下的一個人自己喊1,2,3那么他也就退出了,將不會有輸出
{
if (*(p+i)!=0)//如果這個人的頭上編號不是0就開始報數加1,這里采用的方法是報數為3的人頭上編號重置為0
{
k++;
}
if (k==3)
{ k=0; //報數清零,即下一個人從1開始報數
*(p+i)=0;//將報數為3的人編號重置為0
m++; //退出人數加1
}
i++; //指針后移
if (i==n)//這句很關鍵,如果到了隊尾,就要使指針重新指向對頭
//并且它只能放在i++后面,因為只有i++了才有可能i==n
{
i=0;
}
}
printf("現在剩下的人是:");
for (loop=0;loop<n;loop++)
{
if (num[loop]!=0)
{
printf("%2d號\n",num[loop]);
}
}
}
~~~
- C語言模塊
- 基礎入門
- 各種變量類型
- 條件編譯
- 100例
- day1
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- day2
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- day3
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- day4
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- day5
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- day6
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- day7
- 1.c
- 2.c
- 3.c
- 4.c
- 5.c
- 6.c
- 7.c
- 8.c
- 9.c
- 10.c
- linux基礎知識
- 目錄
- 系統設置
- ftp管理
- ftp-auth
- 進程
- ssh登錄
- 權限屬性
- 用戶/用戶組
- 安裝命令
- 數據庫操作
- 虛擬機vmvare-tools安裝
- VI命令
- 上傳下載
- error
- 虛擬機mac