★約瑟夫出圈問題(可動態輸入)C/C++
阿新 • • 發佈:2019-01-23
題目:有n個人圍成一圈,順序排號。從第一個人開始報數,凡報到m的人退出圈子,問最後留下的是原來第幾號的那位?
程式原始碼(C++):
#include<iostream> using namespace std; void main() { int *a,n,m; cout<<"請輸入兩個數,一個為總人數,一個為每次出圈人編號:\n"; cin>>n>>m;//表示可以動態輸入 a=new int[n+1]; for(int i=0;i<n;i++) //給每個人一個編號 a[i]=i+1; int k=1; //標識處理第k個出圈的人 i=-1; //下標初值為-1,下一個值0就是第1個人的下標 cout<<"離開圈子的人依次是:"; while(1) { for(int j=0;j<m;) //在圈中數m個人 { i=(i+1)%n; if(a[i]!=0) //如果該人在圈中,則數數有效 j++; } if(k==n)break; cout<<a[i]<<" "; //輸出離開圈子的人編號 a[i]=0; //標識該人已離開 k++; } cout<<endl<<"勝利者是:"<<a[i]<<"號"<<endl; //輸出勝利者編號 }