void main()
{
int people[1000],n_5;
printf("Please enter the number of people:\n");
scanf("%d",&n_5);
for(int i=0;i<n_5;i++)
{
people[i]=i+1;
}
//printf("people[4]=%d\n",people[4]);
int *p_5=people;
int remain=n_5,num_off=1;
while(remain>1)//剩下的人數大于1
{
if((p_5)<=(people+n_5-1))//此人不是編號的最后一個
{
//printf("p_5=%d",p_5);
while((*p_5)!=0) //此人之前沒報過3
{
if(num_off!=3)//此人報數不為3
{
num_off++;
}
else if(num_off==3)//此人報數為3
{
*p_5=0;
remain--;
num_off=1;
}
printf("*p_5=%d num_off=%d\n",*p_5,num_off);//便于觀察程序
p_5++;
}
}
else if(p_5>(people+n_5-1))
{
p_5=people;
while((*p_5)!=0)
{
if(num_off!=3)
{
num_off++;
}
else if(num_off==3)
{
*p_5=0;
remain--;
num_off=1;
}
p_5=people;
}
}
}
while((*p_5)==0)
{
p_5++;
}
printf("The number of remained one is:%d \n",*p_5);
}
這里是運行結果,麻煩幫忙看看,謝謝了!
uj5u.com熱心網友回復:
建議自己除錯一下,除錯能力跟編碼能力同樣重要,甚至更重要uj5u.com熱心網友回復:
僅供參考://假設有n個人團團圍做,從第1個人開始數數,數到第m個人時候,第m個人出列,
//然后繼續從1開始數數,數到第m個人退出
#include <stdio.h>
#include <conio.h>
int i,k,t;
int n,m;
static char f[1001];//0該座位未出圈,1該座位已出圈
void main() {
while (1) {
printf("Input n m(1000>=n>=m>=1):");
fflush(stdout);
rewind(stdin);
if (2==scanf("%d%d",&n,&m)) {
if (1000>=n && n>=m && m>=1) break;
}
}
t=0;//已出圈總人數
i=1;//座位編號
k=1;//當前要數的數
while (1) {
if (0==f[i]) {
if (m==k) {
t++;
f[i]=1;
printf("%3d ",i);
if (0==t%10) printf("\n");
if (t>=n) break;
}
k++;if (k>m) k=1;
}
i++;if (i>n) i=1;
}
cprintf("Press any key ...");
getch();
}
uj5u.com熱心網友回復:
供參考:void main()
{
int people[1000],n_5;
printf("Please enter the number of people:\n");
scanf("%d",&n_5);
for(int i=0;i<n_5;i++)
{
people[i]=i+1;
}
int *p_5=people;
int remain=n_5,num_off=0;
while(remain>1)//剩下的人數大于1
{
p_5 = people; //這里相當于把陣列首尾相連
while((p_5)<=(people+n_5-1))//判斷是否到了陣列尾,到尾部跳出重新一輪
{ //這里回圈都是一個n的長度
if(*p_5!=0)//判斷有沒有出圈,如果已經出圈了就跳過,進入p_5++下一位資料判斷
{
num_off++;//沒出圈的才計數值加1
if( num_off==3)
{
printf("此為報到3的數:*p_5=%d num_off=%d\n",*p_5,num_off);//便于觀察程序
*p_5=0;
remain--;//總人數減一
num_off=0;//從0開始重新計數
}
}
//printf("*p_5=%d num_off=%d\n",*p_5,num_off);//便于觀察程序
p_5++; //陣列下一個資料
}
}
p_5 = people; //此時要讓p_5指標回到陣列的首部位置
while(*p_5==0)//找到最后不是0的位置
p_5++;
printf("The number of remained one is:%d \n",*p_5);
}
uj5u.com熱心網友回復:
知道的,謝謝!這個已經是調了好多遍了,還是不行??
uj5u.com熱心網友回復:
好的,謝謝!
uj5u.com熱心網友回復:
謝謝!while回圈太難搞了??
uj5u.com熱心網友回復:
再多用用,就熟練了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275187.html
標籤:C語言
上一篇:如何判斷一串字符中含有中文字符(包括中文輸入的:等符號)
下一篇:gcc 運行phread出現error: pthread.h: No such file or directory,試了各種辦法都不能解決
