C语言小白,示例通过,但是测试时全部WA,希望有大佬可以帮忙看看
查看原帖
C语言小白,示例通过,但是测试时全部WA,希望有大佬可以帮忙看看
475550
192210714218szh楼主2023/9/21 15:32
#include<stdio.h>

int main(){
    //贪心算法
    //每行两个整数,算出单价,并加入第三列,从单价最高的开始装。[4,50]
    //(10 60) -> (10 60 6)
    //(20 100) -> (20 100 5)
    //(30 120) -> (30 120 4)
    //(15 45) -> (15 45 3)
    //N为金币堆数,T为背包容量
    int N, T;
    scanf("%d %d", &N, &T);
    //存储第i堆金币,以及他的重量。最多100个元素,每个元素有3个属性
    float b[100][3] = {0};
    for (int i=0; i<N; i++){
        scanf("%f %f", &b[i][0], &b[i][1]);
        b[i][2] = b[i][1] / b[i][0];
    }
    // 根据b[i][2],也就是计算出来的单价,进行排序。从高到低装入背包。
    // 针对b[i][2]使用冒泡排序,把金子按照单价重新排一次
    for (int i = 0; i < N - 1; i++) {
        for (int j = 0; j < N - i - 1; j++) {
            if (b[j][2] < b[j+1][2]) { 
            // 交换 b[j] 和 b[j+1] 的元素
                int temp[3];
                for (int k = 0; k < 3; k++) {
                    temp[k] = b[j][k];
                    b[j][k] = b[j+1][k];
                    b[j+1][k] = temp[k];
                }
            }
        }
    }
    // 最终的金子价值
    float sum = 0;
    for (int i = 0; i < N; i++) {
        // 背包容量为T,b[i][0]为第i堆金子的数量
        //每次针对b[i][0],取一个单位的金子,每取一次金子,b[i][0]-1,T-1,sum + 第i堆金子的单价
        for (int j = 0; j < b[i][0] && T > 0; j++, T--) {
            sum += b[i][2];
        }
    }
    printf("%.2f", sum);
    return 0;
}
2023/9/21 15:32
加载中...