有n個人圍成一圈,順序排號。從人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原

2021-05-22 07:14:09 字數 6452 閱讀 6986

1樓:

呵呵,同一個人啊

我還是貼出來吧

#include

void main()

i++;//將指標後移,雖然i不是指標,但p+i就是指標了,所以i就是為指標服務的

if(i==n)//如果指標移到了尾部,則返回到頭部i=0;

}//以上的迴圈是主要焦點,後面的就是找出最後那個人,這個好理解while(*p==0)//用這個可以只判斷所找號的前面的號(包括所找號),不用判斷後面的。

p++;

printf("the last one is n0.%d\n",*p);}

2樓:徐臨祥

第一步:設計一個陣列a[n],將陣列的元素全部初始為0.

第二步:迴圈計數i和j,如果a[i]全為0則j到3就讓a[i]=1,如果中間有a[i]=1,跳過這個計數,j繼續增長直到3再執行a[i]=1

第三步:在第二步的同時判斷i是否迴圈到陣列的終點,即不能超過a的長度,否則將i置0繼續迴圈遍歷陣列,執行第二步。

第四步:輸出最後一個元素的位置+1就是最後一個人 (因為陣列是從0開始計數的)0

3樓:文心雕龍

# include

void main()

i++;

if(i == n) i = 0;

}while(!(*p)) p++;

printf("最後留下的是原來第%d號的那位\n",*p);

}希望對你有幫助!

c語言有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報 數)凡報到3的人退出圈子麻煩註釋下**

4樓:凌亂心扉

#include

#define n 5//人數

void main()

,i=0,out_n=0,call_n=0,*p;

p=a;

while(1)//為0(即3)出局

}p++;if(p==a+n)p=a;//迴圈轉向下一人

}printf("最後剩餘者的編號是:%d\n",p+1-a);

}printf()函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。在編寫程式時經常會用到此函式。

函式的原型為:int printf(const char*format,...);函式返回值為整型。若成功則返回輸出的字元數,輸出出錯則返回負值。

printf()函式的呼叫格式為:

printf("<;格式化字串》",《參量表》);

其中格式化字串包括兩部分內容:一部分是正常字元;這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。

參量表是需要輸出的一系列引數,其個數必須與格式化字串所說明的輸出引數個數一樣多,各引數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。

規定符%d十進位制有符號整數

%u十進位制無符號整數

%f浮點數

%s字串

%c單個字元

%p指標的值

%e指數形式的浮點數

%x,%x無符號以十六進位制表示的整數

%o無符號以八進位制表示的整數

%g把輸出的值按照%e或者%f型別中輸出長度較小的方式輸出

%p輸出地址符

%lu 32位無符號整數

%llu 64位無符號整數

5樓:

int main(void)

i++;///每考察1個位子,無論是否有人都得將位子向後移1位if(i==n)///若已把位子移到最後1人的後面了則將其歸0,重新從頭記數

i=0;

} for(i=0;i

三個///後面的是我給你的註釋。不明白續問。

6樓:聽不清啊

void main()

i++; //移到下一個位置

if(i==n)i=0; //若超出範圍,重回頭上} //此迴圈結束時,已有n-1人退出圈子for(i=0;i

7樓:匿名使用者

#include

#include

int main(int argc, char *argv)printf("\n退席的人編號為: ");

i=0;

count=0;   //出列人數---計數mm=1;      //從1開始數

while(count=n)  //當陣列下標大於總人數時,從0開始,也就是陣列尾接上陣列頭

}return 0;}

8樓:

第一輪:

3的倍數(共33個)去掉,還剩67個

第二輪:3的倍數加1(共33個)去掉,還剩34個第三輪:3的倍數加2(共32個)去掉,還剩2個不好意思,最後必定剩下2個,且最後留下來的是1號和2號(從3開始一直到100不是滿足3的倍數就是滿足3的倍數加1就是滿足3的倍數加2,所以全部被去除)

9樓:象晏盤田然

#include

void

main()

;//0表示退出圈

子printf("input

n:");

scanf("%d",

&n);

for(i=0;

i

0;while

(out

!=n-1)

if(num

==3)

i++;

if(i

==n)

}for(i=

0;i<

n;i++)}}

10樓:匿名使用者

#include

int main()

printf("%d\n",s+1);

return 0;}

c語言:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報 數),凡報到3的人退出圈子,

11樓:矜持№黷

#include

#define n 100

void main()

i++;

if(i==n)i=0;

} for(i=0;i

再送點詳解給你

#include

#define n 50 // 排隊人數(可任意更改)#define cal 3 //凡報3的人出列(可任意更改)//下面是排隊編號函式:從h 開始的n個人依次編號1到nvoid stdline(int *h,int n)}void main()

12樓:蒼詩蕾魏珺

那就用陣列,對出去的元素標記下。

比如說a[n]=,f[n]=

凡是出去的標上f[i]=1;

這樣就好程式設計了。自己嘗試下吧。

13樓:匿名使用者

#include

#define n 100

void main()

if(i>=n-1)

i=-1;//實現迴圈報數

}for(i=0;i

if(a[i]!=0)

printf("最後留下來的是第%d號\n",i+1);}

14樓:凌亂心扉

#include

#define n 5//人數

void main()

,i=0,out_n=0,call_n=0,*p;

p=a;

while(1)//為0(即3)出局

}p++;if(p==a+n)p=a;//迴圈轉向下一人

}printf("最後剩餘者的編號是:%d\n",p+1-a);

}printf()函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。在編寫程式時經常會用到此函式。

函式的原型為:int printf(const char*format,...);函式返回值為整型。若成功則返回輸出的字元數,輸出出錯則返回負值。

printf()函式的呼叫格式為:

printf("<;格式化字串》",《參量表》);

其中格式化字串包括兩部分內容:一部分是正常字元;這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。

參量表是需要輸出的一系列引數,其個數必須與格式化字串所說明的輸出引數個數一樣多,各引數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。

規定符%d十進位制有符號整數

%u十進位制無符號整數

%f浮點數

%s字串

%c單個字元

%p指標的值

%e指數形式的浮點數

%x,%x無符號以十六進位制表示的整數

%o無符號以八進位制表示的整數

%g把輸出的值按照%e或者%f型別中輸出長度較小的方式輸出

%p輸出地址符

%lu 32位無符號整數

%llu 64位無符號整數

15樓:匿名使用者

void num(int n,int list) //n是人數,list是報的總數

16樓:蛋疼貨

c語言做起來比較慘

c++比較好做,用標準庫的queue就可以很容易實現。

17樓:就點到為止

約瑟夫問題,這個我知道,等晚上有時間幫你寫個**

18樓:水水

程式設計裡面不是隻有0 1 2這三個數嗎 怎麼會有3呢

c語言程式設計:有n個人圍成一圈,按順序從1到n編號。從第一個人開始,報到3的人退出圈子。

19樓:凌亂心扉

#include

int main(int argc,char*argv);printf("請輸入有幾個人玩遊戲:");

scanf("%d",&n);

for(i=0;i

for(i=1;i<4;i=i%3+1)//控制i的值在[0,3]if(0==a[j])

j=(j+1)%n;

}for(i=0;i}

20樓:滄海雄風

#include

struct serial

;void main()

q->next =p->next ;

printf("被刪除的元素:%-4d\n",p->num);

p=q->next ;

}printf("\n最後報號出來的是原來的:%d\n",p->num);}8

被刪除的元素:3

被刪除的元素:6

被刪除的元素:1

被刪除的元素:5

被刪除的元素:2

被刪除的元素:8

被刪除的元素:4

最後報號出來的是原來的:7

press any key to continue

21樓:匿名使用者

此題可用數學方法求解。

設有n個人(編號0~(n-1)),從0開始報數,報到(m-1)的退出,剩下的人繼續從0開始報數  (用數學方法解的時候需要注意應當從0開始編號,因為取餘會取到0解。)

實質是一個遞推,n個人中最終留下來的序號與n-1個人中留下來的人的序號有一個遞推關係式。

假設除去第k個人,則

0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1          // 原始序列 (1)

0, 1, 2, 3, ..., k-2,      , k, ..., n-1        // 除去第k人,即除去序號為k-1的人   (2)

k, k+1, ..., n-1,    0,    1,        ..., k-2  // 以序號k為起始,從k開始報0  (3)

0, 1,     ..., n-k-1, n-k, n-k+1, ..., n-2   // 作編號轉換,此時佇列為n-1人  (4)

變換後就完完全全成為了(n-1)個人報數的子問題,注意(1)式和(4)式,是同一個問題,不同的僅僅是人數。比較(4)和(3),不難看出,0+k=k, 1+k=k+1, ... ,(3)式中'0'後面的數字,((n-3)+k)%n=k-3,((n-2)+k)%n=k-2,

對於(3)式中'0'前面的數字,由於比n小,也可看作(0+k)%n=k,  (1+k)%n=k+1,  故可得出規律:

設(3)中某一數為x' , (4)中對應的數為x,則有:x'=(x+k)%n.

設x為最終留下的人序號時,佇列只剩下1人時,顯然x=0; 此時可向前回溯至2人時x對應的序號,3人時x對應的序號……直至n人時x的序號,即為所求。

#include

const int m = 3;

int main()

return 0;}

n個人圍成一圈,1 3報數,報到3的退出圈外,如此迴圈,最後哪個人留下?(用指標解決)

你這裡有明顯的死迴圈。你把i地址給了select 但是你在select 當中從來就沒有改變過i的值,那就是說無論執行多少次,你的i始終都是20,那你就一直在while 裡面轉了啊。用c寫了個例子 你跑跑看效果 include main if array i 0 for i 0 i c語言編寫n個人圍...

一圈可字是什麼成語,很多可字圍成一圈是什麼成語

可圈可點 古代用加圓圈或點表示文章的句讀,圈點也常加在字句的旁邊,表示精彩或重要。可圈可點即指文章精彩,值得加以圈點,也引申為事物值得稱讚。一個可字圍了一圈,外面還有一個可,瘋狂猜成語 答 可圈可點 古代用加圓圈或點表示文章的句讀。圈點也常加在字句的旁邊,表示精彩或重要。可圈可點是指文章精彩,值得加...

開白色小花圍成一圈的灌木叫什麼樹開圍成一圈白色的小花的灌木是什麼樹

這是瓊花。瓊花,又稱聚八仙 蝴蝶花。忍冬科落葉或半常綠灌木。4 5月間開花,花大如盤,潔白如玉。聚傘花序生於枝端,周邊八朵為萼片發育成的不孕花,中間為兩性小花。分佈在四川 甘肅 江蘇 河南 山東以南等地。中文名稱 瓊花 外文名稱 wild chinese viburnum別稱 木繡球 聚八仙花 蝴蝶...