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包好。不要浸的太多,會影響通風 經常...