A29683.发牌游戏 详细题解
2026-10-06 13:06:59
发布于:广东
3阅读
0回复
0点赞
这道题也是肥肠的简单
——————————————————————————————————————————————————————————
首先,肯定要头文件及新建变量
#include<bits/stdc++.h>//这里用万能头
using namespace std;
int k,n,p;
接着,创建队列
queue<int>q;//创建队列
之后就是主函数+输入
int main(){
cin>>k>>n>>p;
注意:
这里的n后面没有用,这里只是为了凑输入
题目要求输出牌的编号,我们先把1~k的牌编号存入队列中
for(int i=1;i<=k;i++){
q.push(i);//将1~k存入队列
}
接着,就可以直接循环输出取牌了
while(q.size()){
cout<<q.front()<<' ';//输出最上面的牌编号
q.pop();//取出牌
题目要求:
②每发完一张牌,他必须将接下来的p张牌一张一张地依次移到最后,放在牌堆的底部。
所以我们循环,把最上面的一张牌复制一份,放到下面,再删除原来的那份
if(q.size()){//保证有牌可以放
for(int i=0;i<p;i++){
q.push(q.front());//复制一份上方的牌放到下面
q.pop();//删除原来的牌
}
}
注意:
要保证有牌可以放到最下面,所以才判断
最后,结束
}
return 0;
}
——————————————————————————————————————————————————————————
以下为完整代码
#include<bits/stdc++.h>//这里用万能头
using namespace std;
int k,n,p;
queue<int>q;//创建队列
int main(){
cin>>k>>n>>p;
for(int i=1;i<=k;i++){
q.push(i);//将1~k存入队列
}while(q.size()){
cout<<q.front()<<' ';//输出最上面的牌编号
q.pop();//取出牌
if(q.size()){//保证有牌可以放
for(int i=0;i<p;i++){
q.push(q.front());//复制一份上方的牌放到下面
q.pop();//删除原来的牌
}
}
}
return 0;
}
——————————————————————————————————————————————————————————
点个赞把,球球了,这真的费了我好大心血/(ㄒoㄒ)/~~
这里空空如也

有帮助,赞一个