0

我已经用 C 语言编写了代码,但它似乎通过了示例案例,但是当涉及到测试案例时,它显示了错误的答案。输入 输入的第一行给出了测试用例的数量,T.T 测试用例紧随其后。每个测试用例都以包含两个整数 N 和 B 的单行开始。第二行包含 N 个整数。第 i 个整数是 Ai,即第 i 个房子的成本。

输出 对于每个测试用例,输出一行包含 Case #x: y,其中 x 是测试用例编号(从 1 开始),y 是您可以购买的最大房屋数量。

限制 时间限制:每个测试集 15 秒。内存限制:1GB。1 ≤ T ≤ 100。1 ≤ B ≤ 105。1 ≤ Ai ≤ 1000,对于所有 i。测试集 1 1 ≤ N ≤ 100。测试集 2 1 ≤ N ≤ 105。样本

输入

输出

3 4 100 20 90 40 90 4 50 30 30 10 10 3 300 999 999 999

案例#1:2 案例#2:3 案例#3:0

在示例案例 #1 中,您的预算为 100 美元。您可以花 20 + 40 = 60 美元购买 1 号和 3 号房屋。在示例案例 #2 中,您的预算为 50 美元。您可以花 30 + 10 + 10 = 50 美元购买第 1、第 3 和第 4 套房屋。在示例案例 #3 中,您的预算为 300 美元。你不能买任何房子(所以答案是 0)。

我的代码是

#include <stdio.h>

int main(){
    int test;
    scanf("%d",&test);
    for(int i=1;i<=test;i++){
        int N;
        long int B;
        scanf("%d %ld",&N,&B);
        long int Case = 0,r=0;
        int array[10000];
        char ch;
        do {
            scanf("%d%c",&array[r],&ch);
            r++;
        }while(ch!='\n');
        for (int k=0;k<N;k++){
            for (int m=k;m<N;m++){
                int temp;
                if(array[k]>array[m]){
                    temp=array[k];
                    array[k]=array[m];
                    array[m]=temp;
                }
            }
        }
        r=0;
        while(Case<=B){
            Case+=array[r];
            r++;
        }
        printf("Case #%d: %d\n",i,r-1);
    }
}
4

1 回答 1

0

罪魁祸首是控制while下面循环的条件

while(Case<=B){ /* the logic of condition expression is wrong*/
   Case+=array[r];
   r++;
}

它一定是(r < N && Case+array[r]<=B)r<N是必要的;您还必须检查数组索引)。线

printf("Case #%d: %d\n",i,r-1);

也是错误的。必须纠正为

printf("Case #%d: %ld\n",i,r);

另一个错误是int array[10000];. 大小必须是,100000因为 的值N可以是100000最大值。

您的排序算法很慢。应该使用更快的算法或标准库函数qsort

于 2021-02-11T19:13:54.827 回答