CSPJ2021 完善程序1
(Josephus 问题) 有n个人围成一个圈,依次标号0至n-1.从0号开始,依次 0, 1, 0, 1,...交替报数,报到1的人会离开,直至圈中只剩下一个人。求最后剩下人的编号。
试补全模拟程序。
#include <iostream> using namespace std; const int MAXN =1000000; int F[MAXN]; int main() { int n; cin >>n; int i = 0,p = 0, c = 0; while (___(1)___) { if(F[i] == 0 ) { if(___(2)___) { F[i] = 1; ___(3)___; } ___(4)___; } ___(5)___; } int ans = -1; for (i =0 ; i < n; i++) if (F[i] == 0) ans = i; cout << ans << endl; return 0; }
⑴处应填( )。
i<n
c<n
i<n-1
c<n-1
②处填( )
i%2==0
i%2==1
p
!p
③处填( )
i++
i=(i+1)%n
c++
p^=1
④处填()
i++
i=(i+1)%n
c++
p^=1
⑤处填( )
i++
i=(i+1)%n
c++
p^=1
发表评论