《算法笔记》codeup 100000584 问题 D: Repair the Wall

思路:

每次用最长的砖,累加的长度超过窟窿的长度就算成功,输出用了的砖数;如果用完所有的砖后,累加的长度仍未达到窟窿的长度则输出“impossible”。

解答:

/*
《算法笔记》codeup 100000584 问题 D: Repair the Wall
*/

#include 
#include 
using namespace std;

int cmp(int a, int b) {
    return a > b;
}

int main() {
    int crack_length, bricks_num;
    while(scanf("%d %d", &crack_length, &bricks_num) != EOF) {
        int bricks_length[bricks_num + 1];
        bricks_length[0] = 0x7fffffff;                         // 0位元素弃置,将其设为最大使其在sort后仍留在原地
        for(int i = 1; i <= bricks_num; i++) {
            scanf("%d", &bricks_length[i]);
        }

        sort(bricks_length, bricks_length + bricks_num, cmp);

        int temp_length = 0;
        for(int i = 1; i <= bricks_num; i++) {
            temp_length += bricks_length[i];
            if(temp_length >= crack_length) {
                printf("%d\n", i);
                break;
            }
            if(i == bricks_num)
                printf("impossible\n");
        }
    }

    return 0;
}

坑:

vscode提示"expected unqualified-id before numeric constant",检查后发现是由于我想从bricks_length的第二个元素开始排序,于是将sort的第一个参数写为"bricks_length + 1"导致的。将bricks_length[0]设为无穷大就能从第一个元素开始排序且不影响后续代码。

你可能感兴趣的:(codeup)