Syxxxxxxxxxxx 2022-08-26 14:40 采纳率: 100%
浏览 22
已结题

谁能帮我看看出什么问题了

有没有da lao帮我看下zhe ti为什么错了

Description
lao shi给里面的小朋友们布置了一场游戏,A第一个站了出来,游戏是这样的,总共有n个苹果,吃第i个苹果可以得到a[i]的分数。
假设A是大胃王,意味着他可以一直吃不会吃撑。
现在会有q次询问,每次询问最少吃多少个苹果可以得到不小于x的得分,无法满足就输出-1.
注意:在每次询问中,不能多次吃同一个苹果,每次询问互相独立,不会因为第一次询问吃了几个后苹果不够的情况。
Format
Input
第一行输入n和q,代表苹果总数和询问次数
第二行nn个数字a[i],代表吃第ii个苹果的得分。
接下来q行qq个数字,每次输入一个xx,代表得分。具体可参考题目描述
Output
一共输出qq行,每行一个数字。
若可以得到xx的得分,则输出最少吃的苹果数量。
否则输出-1
Samples
输入数据 1
8 7
4 3 3 1 1 4 5 9
1
10
50
14
15
22
30
输出数据 1
1
2
-1
2
3
4
8
输入数据 2
4 1
1 2 3 4
3
输出数据 2
1
Explain
针对样例2,只有一次询问,需要达到的得分是3,此时我们可以选择吃1和2,或者单独吃3或者单独吃4都可达到目标,由于选择最少的数量,所以单独吃3或者4都可以。

我的代码:

#include<bits/stdc++.h>
using namespace std; 
bool cmp(int x,int y){
    return x>y;
}
int main(){
    int n,qs,num=0;
    cin>>n>>qs;
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
        num+=a[i];
    }
    sort(a,a+n,cmp);
    for(int p=0;p<qs;p++){
        int m,sum=0;
        cin>>m;
        if(m>num) cout<<"        "<<-1<<endl;
        else if(m==num) cout<<"        "<<n<<endl;
        else if(m==0) cout<<"        "<<0<<endl;     //9 5 4 4 3 3 1 1
        else{
            for(int i=0;i<n;i++){
                sum+=a[i];
                if(sum>=m){
                    cout<<"        "<<i+1<<endl;
                    continue;
                }
            }
        }
    }
    return 0;
}

运行后(前面有一长串空格的是输出,用的是测试样例1):

img

粗体是屏蔽词,忽略就好

  • 写回答

2条回答 默认 最新

  • harmis_yz 2022-08-26 15:05
    关注

    把第26行的continue换成break就可以啦
    因为第24行的判断已经说明第一次进入的i+1是最少的数量了,所以不需要继续吃苹果,直接退出循环,进行下一次输入

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误
  • ¥15 Minifilter文件保护
  • ¥15 onvif框架引用一直报错
  • ¥50 C#和C++混合编程,使用CLR托管,报错System.Runtime.InteropServices.SEHException
  • ¥30 .NET使用sqlite发布后报错
  • ¥15 Unity在WebGL平台导出Word报错问题
  • ¥15 ghpython这里总是报错而且rhino视图窗口内不显示怎么办
  • ¥15 布尔运算推导,请证明
  • ¥15 有没有人会打学生成绩管理系统呀