約瑟夫環問題問每隔元素輸出元素,問從哪元素開始數,可以使最後輸出

2021-10-13 21:10:38 字數 2050 閱讀 9174

1樓:匿名使用者

首先按正常約瑟夫環程式推出由1開始報數,每報5個就退出隊伍,最後是誰最後出隊,然後看這個最後出隊的人和第一個的位置關係,推出應該由第幾個報數,最後是第1個人出隊。

如最後一個是原來排第3的人出隊,它和第一個人之間差了2位,則應該由(1+10)-(3-1)=9,由第9個人開始報數,則最後一個就是第一個人出隊

參考程式,n為佇列人數

#include

void main()

;scanf("%d",&n);

f=0; s=0;

while(f

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

if(a[i]==0)

}printf("\n");

for(i=1;i<=n;i++)if(a[i]==0)break;

printf("由第%d個人開始報數,最後第一人出隊\n",10+1+(1-i));

system("pause");}

2樓:匿名使用者

這個問題,你可以逆方向先從這個元素開始,輸出最後一個元素,就是正向你要找的開始數。

3樓:匿名使用者

倒著推吧...就是1l的說法

c語言 約瑟夫環問題:使用者輸入m,n值,從1至n開始順序迴圈數數,每數到m輸出該數值,直至全部輸出。

4樓:

//用動態陣列完成的約瑟夫環

#include

#include

main()

d[i]=0; //第m個數數過清0

printf("%d ",i+1); //輸出數到的第m個數,就是陣列元素的下標

total++; //記錄已經被輸出的資料總數

}system("pause");}

5樓:匿名使用者

幫你改了程式

#include

#include

struct number

;void main ()

else

tail->next=p;

tail=p;

}tail->next=head;

p = tail; //從head開始,記錄開始的前一個指標while(n--) //剩下的數的個數為nprintf("\n");}

6樓:天嵐蜻蜓天使

-9804520751

約瑟夫環問題,從第一個人開始數,數到二的人出列 j**a

用c++編寫約瑟夫環的**,也就是出圈問題,n個人,數到k出圈,接著從1開始數,一直到最後一個人, 20

7樓:匿名使用者

#include

using namespace std;

int main()

{ int n,s,m;

cout<<"please input the valuse of n,m,s"<>n>>m>>s;

if(n<=0||s<=0||m<=0)

{ cout<<"error"<1;k--){ i=((i+m-1)%k);//計算要報數人序號if(i!=k-1)

{ temp=a[i];

for(j=i;j=0;k--)

{cout<

約瑟夫環問題的輸出結果是多少?

8樓:匿名使用者

||對於n個數字(0,1,2.....n-1)排成一圈,每次刪除第m個數字的情況,有遞推公式:

則根據這

版個公式,實現的**為:

#include

using namespace std;

int lastremaining(unsigned int n, unsigned int m)

int main()

最後的結果為:

c 單迴圈連結串列的約瑟夫環問題,要求輸出全部出隊順序。程式掛

我去,你來 這程式居然能編譯過去,我很 自無語。1 看到第三行int a 既然是常量初始化,你搞個空怎麼可以,main裡面int a n n是你輸入的資料,編譯器不知道值,怎麼可能編譯過去你這需要用到動態分配,int a a new int n 你宣告的全域性的a陣列應該去掉,沒什麼用,還引起歧義2...

c語言問題求解,C語言程式設計問題 約瑟夫問題求解

8 第一次迴圈p是指向2的,用 s控制輸出就是2010,第二次迴圈p增1指向0了,輸出自然是010。這很好理解。9 早期的編譯器是2位元組,後來的編譯器是4位元組了,所以二者都正確。一般教科書用的是早期的系統,應該是2位元組。不要糾結這些,知道就行了,若考試,按幾位元組算會明示的。10 001011...

包皮環切手術的問題,包皮環切手術後的一些問題

我16號做的手術 手術費用 藥物 一共 1200左右!掛泌尿外科 就說包皮過長!包皮環切手術後的一些問題 我半年前做的手術 腫沒有問題,再過兩天慢慢就消了 沒有紗布的話,主要防止感染 其實也可以自己包紮的。就是用新的消毒紗布 藥店有賣 浸上利凡諾藥水以後再把小dd包好。不要浸的太多,會影響通風 經常...