1樓:
此題可用數學方法求解。
設有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()
2樓:匿名使用者
#include
int fun(int n ,int *p);int i,j;
int t1,t2;
for(i=0;i *p=arr1[2]; p++; for(j=0;j arr1[n-3-j]=t1; arr1[n-2-j]=t2; *p=arr1[2]; p++; }*p=arr1[0]; p++; *p=arr1[1]; return *p; }void main() m個人圍成一圈,1,2,3迴圈報數,報到3的人退出,函式int fun(int n ,int *p)實現上述功能。··怎麼做?? 3樓:匿名使用者 #include int fun(int n ,int *p);int i,j; int t1,t2; for(i=0;i *p=arr1[2]; p++; for(j=0;j arr1[n-3-j]=t1; arr1[n-2-j]=t2; *p=arr1[2]; p++; } *p=arr1[0]; p++; *p=arr1[1]; return *p; }void main() 4樓:秋楓 int fun(int n ,int *p)}j++; if(j==n) j=0; if(k==n) break; }return p[n-1];} c語言編寫n個人圍成一圈,按1、2、3報數,報到3的人退出,求最後留在圈中的人是最初n個人中的第幾個(用指 5樓:匿名使用者 此題可用數學方法求解。 設有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() 6樓:手機使用者 以前做過的,貼一個給你,人數和報的數都可以輸入的 #include#include//應用函式呼叫來實現 void fun_kill(int *pa,int n,int m)i=0;int mcount=0; int icount=0; while(icount人數小於總人數if(mcount==m)i++;//報數的同時指標也開始走動if(i==n)}for(i=0;i scanf("%d",&n); printf("請輸入要報的數:"); scanf("%d",&m); int *pkill=(int *)malloc(sizeof(int)*n); fun_kill(pkill,n,m); c語言程式設計:有n個人圍成一圈,按順序從1到n編號。從第一個人開始,報到3的人退出圈子。 7樓:凌亂心扉 #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} 8樓:滄海雄風 #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 9樓:匿名使用者 此題可用數學方法求解。 設有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;} 10樓:餘啊水中游啊遊 這是約瑟夫環問題。 #include #define m 43/*總人數*/ #define n 3 #define start 0/*第一個報數的人*/void main(void) getch();} 11樓:小翼 經典約瑟夫環問題: // n個人(1..n)圍成一圈,從m開始報數,增量為k// 返回最後一個人的編號,o(n)複雜度; int josephus(int n,int k,int m) 12樓:匿名使用者 請問這個n有取值範圍嗎? 目前我有兩種思路,一種簡單的方式是用長度為n的陣列記錄,初始化為1,當計數到3是把對應的陣列下標輸出,並賦值為0.依次重複直到只剩下一個1. 第二種還是我的初步構想,找出退出的規律,可能可以用遞迴到n=1的情況。 13樓:華慧 我也不知道 等別人回答吧 無毒的白環或者棺材頭三角形脊椎的銀環 劇毒,還有黑白王蛇就是樓下那張圖 無毒 剛剛遇到蛇了,蛇身是黑色的,但有一圈圈白環,這是什麼蛇 貝克街流浪貓 銀環蛇或白環蛇 無圖無真相 春 銀環蛇,白天不容易看到 黑白相間的話是銀環蛇 有一種蛇一圈黑一圈黃的是什麼蛇? 漫隨流水 金環蛇金環蛇 學名 copy ... 劉肖凱 我是北方的,原本自我感覺身強體壯的,但是一到南方,氣候潮溼,起了溼疹,剛開始是塗了皮炎平就好了。我的身體還容易過敏,現在還是時有發癢。我用的是糠酸莫米鬆軟膏。不知道是否適合於你。我們有些症狀類似,但是我的是過敏了。而且也沒有你所說是中間好了外圍還是癢這樣的情況。我打針吃藥一個多月,歷盡病痛的... 地球自轉一圈就是一天,即所說的太陽日,地球轉一圈需要23小時56分4.09秒。誰都知道,地球公轉一週稱一年,有365日5小時48分46秒 一天有23小時56分4.09秒,這是一個太陽日.恆星日總是比真太陽日要短一些。這是因為地球離恆星非常遙遠,遠到從恆星上看來,地球似乎是不動的,地球的公轉軌道相對於...蛇身是一圈白一圈黑的是什麼蛇,有一種蛇一圈黑一圈黃的是什麼蛇
肩膀上起了很多紅色的疹子一圈一圈的起
地球自轉一圈是多少天,請問地球自轉一圈準確的時間是多少