Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 约瑟夫环问题
- 出处 educoder作业 指针
- 您好!我对这个问题GitHub上的一个答案不太理解,请您指导,谢谢!(问题在代码旁批中)
- 原网址为: https://github.com/905355494/SJTU-Awesome-TA-CPP/blob/master/educoder-tasks/task-chp7.md
- ### 任务描述
- n个人围成一圈,按顺序从1到n编号。从第一个人开始报数1、2、3,报到3的人退出圈子,下一个人从1开始重新报数,报到3的人退出圈子。如此进行下去,直到留下最后一个人。当给定一个正整数n时,请问留下来的人的编号是多少?
- ### 输入输出示例
- input:`4`
- output:`1`
- ### 代码样例
- #include <iostream>
- using namespace std;
- int main()
- {
- int n;
- cin>>n;
- int *arr = new int[n];
- int *p = arr;
- int c=0;
- for(int i=0; i<n; i++)arr[i]=1;
- int j=n-1;
- while(j--){
- for(int i=0; i<2; i++){ //请问这里为什么这边要执行两次?是与约瑟夫环的3有关吗?
- while(*p==0){p++;c++;if(c==n){p=arr;c=0;}} //请问这一句是什么意思?
- {p++;c++;if(c==n){p=arr;c=0;}} //此句反复出现,在不同位置有何作用?
- }
- while(*p==0){p++;c++;if(c==n){p=arr;c=0;}}
- *p=0;
- {p++;c++;if(c==n){p=arr;c=0;}}
- }
- for(int i=0; i<n; i++){
- if(arr[i]==1){cout<<i+1;break;}
- }
- delete arr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement