#include \n#include \nusing namespace std;\nint main(){\n\tint n,k;\n\tcin>>n>>k;\n\tvector people(n);\n\tvector res;\n\tint count=0;\n\tint index=0;\n\tfor(int i=0;i<n;i++){\n\t\tpeople[i]=i+1;\n\t}\n\twhile(!people.empty()){\n\t\tcount++;\n\t\tindex=(index+1)%people.size();\n\t\tif(count==k){\n\t\t\tres.push_back(people[index-1]);\n\t\t\tpeople.erase(people.begin()+index);\n\t\t\tcount=0;\n\t\t\tindex--;\n\t\t}\n\n\t}\n\tfor(int i=0;i<res.size();i++){\n\t\tcout<<res[i]<<" ";\n\t}\n\tcout<< endl;\n\treturn 0;\n}\n该段代码无法输出正确的结果是因为在删除元素后,没有对index进行修正。在删除元素后,index应该减1,以保证下一次循环从正确的位置开始。修改后的代码如下:\n\ncpp\n#include <iostream>\n#include <vector>\nusing namespace std;\nint main(){\n\t int n,k;\n\t cin>>n>>k;\n\t vector<int> people(n);\n\t vector<int> res;\n\t int count=0;\n\t int index=0;\n\t for(int i=0;i<n;i++){\n\t\t people[i]=i+1;\n\t }\n\t while(!people.empty()){\n\t\t count++;\n\t\t index=(index+1)%people.size();\n\t\t if(count==k){\n\t\t\t res.push_back(people[index]);\n\t\t\t people.erase(people.begin()+index);\n\t\t\t count=0;\n\t\t\t index--;\n\t\t }\n\n\t }\n\t for(int i=0;i<res.size();i++){\n\t\t cout<<res[i]<<" ";\n\t }\n\t cout<< endl;\n\t return 0;\n}\n

C++ 代码优化:Josephus 问题解法分析与修正

原文地址: https://www.cveoy.top/t/topic/pzwW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录