Gravatar
X
积分:84
提交:35 / 76

这道题如果你的思维很局限,可以使用queue,先创建一个队列,正常输入,在queue中进行运算,代码如下:


#include<bits/stdc++.h>
using namespace std;
queue<int> q;
int a,n,cnt;//cnt代表位置
int main(){
    freopen("ysf.in","r",stdin);
    freopen("ysf.out","w",stdout);
    cin>>a>>n;
    for(int i=1;i<=a;i++)
        q.push(i);//q.push()输入
    while(!q.empty()){//如果为空退出循环
        cnt++;
        if(cnt==n){//如果到了出圈的人
            cout<<q.front()<<" ";//q.front()出圈
            q.pop();//删除出圈的人,q.pop()删除
            cnt=0;//重新计数
        }
         else { //如果这人不用出圈,重新刷新一下
             int x = q.front();
             q.pop();
             q.push(x);
         }
    }
    return 0;
}



题目3888  约瑟夫问题      2      评论
2024-01-08 21:30:02    
Gravatar
X
积分:84
提交:35 / 76


对于学过排序的来说是一道比较简单的题。思路:题目让给出时长最短的方法,参加之后增加的值都是1,所以先将所有活动时长从小到大排列一遍,再逐个参加,
直到满足条件为止,一下展示的是sort排序方法
#include<bits/stdc++.h>//万能头文件
using namespace std;
int a[100001],b[100001],m,n,ans;//ans的值自动会为0
int main(){
    freopen("bird.in","r",stdin);//freopen文件读写
    freopen("bird.out","w",stdout);
    cin>>n>>m;//读入
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a,a+n);//将时长从小到大排列
    for(int i=1;i<=m;i++) ans+=a[i];//加上所需时间
    cout<<ans;//输出结果
    return 0;

}



题目3900   [桐柏邀请赛S14]bird AAAAAAAAAA      4      评论
2023-10-19 21:12:42