c語言有n個人圍成一圈,從人開始報數3,每報

2021-03-03 21:52:57 字數 6589 閱讀 8503

1樓:匿名使用者

#include

#include

using namespace std;

struct node

;int main()

else

cout<<"請輸入第 "<>(p->code);

p->no=i;

}p->next=first; //讓表尾指向表頭形成迴圈連結串列p=first;

cout<<"出列順序為: ";

for (j=1;j<=n;j++)

cout<

return 0;}

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

2樓:矜持№黷

#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()

3樓:蒼詩蕾魏珺

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

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

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

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

4樓:匿名使用者

#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);}

5樓:凌亂心扉

#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位無符號整數

6樓:匿名使用者

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

7樓:蛋疼貨

c語言做起來比較慘

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

8樓:就點到為止

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

9樓:水水

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

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

10樓:匿名使用者

#include

void main()

; //0表示退出圈子

printf("input n:");

scanf("%d", &n);

for (i = 0; i < n; i++)i = 0;

while (out != n-1)

if (num == 3)

i++;

if (i == n)

}for (i = 0; i < n; i++)}}

11樓:匿名使用者

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

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

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

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

12樓:匿名使用者

其實只要定義一個陣列來標記有沒有出圈子就可以了,最後只留一個。

**有點亂,不過有註釋。

code:

#include

using namespace std;

const int max = 2000;

int main()

i=1;

int k=0;

int p=0;

while(1)

}i++;

if(k==n-1) break; //當拿出去的個數等於n-1時,就跳出,說明只剩一個了

} cout<

for(i=1;i<=n;i++)

if(c[i]) cout<

return 0;}

13樓:匿名使用者

不用指標,就不能動態刪除元素。做起來很麻煩,效率極低。而且最後陣列剩餘哪個元素也不好判斷,只能依靠報數次數來判斷是否只剩一人了。好吧,看在是女生,幫你寫寫:

int n=100;

int a[n],i,j=0;

//賦初值

for(i=0;i=n)

j-=n;

a[j]=1;

}//最後找到那個為零的值

for(i=0;i

printf("the %dth person is still in the circle! \n",i);

14樓:匿名使用者

這個不是c語言程式設計的課後題麼???我以前學c語言時自己做出來了,

樓主不如自己動腦想想啊。。。

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

15樓:凌亂心扉

#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}

16樓:滄海雄風

#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

17樓:匿名使用者

此題可用數學方法求解。

設有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;}

18樓:餘啊水中游啊遊

這是約瑟夫環問題。

#include

#define m 43/*總人數*/

#define n 3

#define start 0/*第一個報數的人*/void main(void)

getch();}

19樓:小翼

經典約瑟夫環問題:

// n個人(1..n)圍成一圈,從m開始報數,增量為k// 返回最後一個人的編號,o(n)複雜度;

int josephus(int n,int k,int m)

20樓:匿名使用者

請問這個n有取值範圍嗎?

目前我有兩種思路,一種簡單的方式是用長度為n的陣列記錄,初始化為1,當計數到3是把對應的陣列下標輸出,並賦值為0.依次重複直到只剩下一個1.

第二種還是我的初步構想,找出退出的規律,可能可以用遞迴到n=1的情況。

21樓:華慧

我也不知道 等別人回答吧

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

22樓:凌亂心扉

#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位無符號整數

vb有人圍成一圈編號為016第0號的人

絕無可能剩1個人,最後必須剩2個人,剩下的是0,1兩個人 private sub command1 click form1.cls dim a 1 to 17 as integerdim i as integer,j as integer,k as integer for i 1 to 17 a i...

舌頭有白色一圈,舌頭上起了一圈一圈白色的怎麼回事

潰瘍,敷上一點白砂糖,不要嚥下嘔。多幾次,一天就好。疼不疼?看起來像是上火起潰瘍了 我的舌頭最近怎麼老出現白色的圈圈 就是一圈白 圈 考慮是鵝口瘡引起的症狀,建議到醫院口腔科確診,多飲水,多吃蔬菜和水果,不要食用辛辣刺激性食物 舌頭上起了一圈一圈白色的怎麼回事 你好,根據你的描述,但是沒有看到 考慮...

地球要一圈有多少公里,地球一圈有多少公里

在不同的緯度,緯線圈長度不同,赤道長度大約是4萬公里,而緯度60度的緯線圈是2萬公里長,地球上最大的圓就是赤道圈或者經線圈,4萬公里 赤道半徑 是6378.137km 赤道周長 40075.7km 這樣衛星軌道半徑是6750km左右,這樣算出來衛星軌道周長是42000km左右,也是約四萬公里 是地球...