南宁市兴宁区建设局网站,营销型企业网站建设应遵循的原则,买卖域名的网站,广州从化网站制作公司约瑟夫问题 n 个小孩围坐成一圈#xff0c;并按顺时针编号为1,2,…,n#xff0c;从编号为 p 的小孩顺时针依次报数#xff0c;由1报到m #xff0c;当报到 m 时#xff0c;该小孩从圈中出去#xff0c;然后下一个再从1报数#xff0c;当报到 m 时再出去。如此反复#…约瑟夫问题 n 个小孩围坐成一圈并按顺时针编号为1,2,…,n从编号为 p 的小孩顺时针依次报数由1报到m 当报到 m 时该小孩从圈中出去然后下一个再从1报数当报到 m 时再出去。如此反复直至所有的小孩都从圈中出去。请按出去的先后顺序输出小孩的编号。 Input 每行是用空格分开的三个整数第一个是n,第二个是p,第三个是m (0 m,n 300)。最后一行是: 0 0 0 Output 按出圈的顺序输出编号编号之间以逗号间隔。 Sample Input 8 3 4 0 0 0 Sample Output 6,2,7,4,3,5,1,8
#includebits/stdc.h
using namespace std;
//队列
int main(){int n,p,m;while(cinnpm){queueint children;if(n0 p0 m0){break;}for(int i1;in;i){children.push(i);}for(int i1;ip;i){children.push(children.front());children.pop();}while(!children.empty()){for(int j1;jm;j){children.push(children.front());children.pop();}if(children.size()!1){coutchildren.front(),;}else{coutchildren.front();}children.pop();}}return 0;
}猫狗收容所 有家动物收容所只收留猫和狗但有特殊的收养规则收养人有两种收养方式 第一种为直接收养所有动物中最早进入收容所的 第二种为选择收养的动物类型猫或狗并收养该种动物中最早进入收容所的。
给定一个操作序列代表所有事件。 若第一个元素为1则代表有动物进入收容所第二个元素为动物的编号正数代表狗负数代表猫 若第一个元素为2则代表有人收养动物第二个元素若为0则采取第一种收养方式若为1则指定收养狗若为-1则指定收养猫。
请按顺序返回收养的序列。 若出现不合法的操作即没有可以符合领养要求的动物则将这次领养操作忽略。
输入第一个是n它代表操作序列的次数。接下来是n行每行有两个值m和t分别代表题目中操作的两个元素。
输出按顺序输出收养动物的序列编号之间以空格间隔。
#includebits/stdc.h
using namespace std;
//队列
int main(){int n,m,t;//两个队列一个是猫一个是狗//如何得知最早进入收容所的动物//解决方法三个队列不现实当猫或狗被领养的时候总的队列没办法删除 //解决办法(新) queueint cat;queueint dog;int counter0;cinn;while(n--){cinmt;if(m1){if(t0){counter;dog.push(counter);dog.push(t);}else if(t0){counter;cat.push(counter);cat.push(t);}}else if(m2){if(t0){if(!dog.empty() !cat.empty()){if(dog.front()cat.front()){dog.pop();coutdog.front() ;dog.pop();}else{cat.pop();coutcat.front() ;cat.pop(); }}else if(!cat.empty() dog.empty()){cat.pop();coutcat.front() ;cat.pop(); }else if(cat.empty() !dog.empty()){dog.pop();coutdog.front() ;dog.pop(); }}else if(t1){if(!dog.empty()){dog.pop();coutdog.front() ;dog.pop(); }}else if(t-1){if(!cat.empty()){cat.pop();coutcat.front() ;cat.pop();}}}}return 0;
}本题也可以把counter与编号合起来使用结构体需要注意一下队列为空时的几种情况