1070. 结绳(25)

原题: https://www.patest.cn/contests/pat-b-practise/1070

思路: 这题就是玩文字游戏, 本来我站在正常人的思维上思考, 心说弄个最长的绳子,
那就是找出最长的两个绳子之和, 再除以2就OK.

而且题目说"原来两段绳子的长度就会减半", 这句话怎么理解, 如果理解成15/2 + 15/2
那正好是测试输出给的答案, 但事实根据正确答案, 这句话必须理解成(15+15) / 2

我知道你可能不知道我说的啥, 最关键的就是绳子必须用完!!!

实现:

#include <stdio.h>
#include <stdlib.h>
// 绳子必须用完!!! 绳子必须用完!!! 绳子必须用完!!!
#define LEN 10010

int compare (const void *a, const void *b);

int main (void) {
    int n;
    int length[LEN];
    int sum;
    int i;

    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d", &length[i]);
    }
    qsort(length, n, sizeof(int), compare);
    sum = length[0];
    for (i = 1; i < n; i++) {
        sum = (sum + length[i]) / 2;
    }
    printf("%d", sum);

    return 0;
}

int compare (const void *a, const void *b) {
    return *(int*)a - *(int*)b;
}

posted @ 2017-11-26 10:29  阿胜4K  阅读(244)  评论(0编辑  收藏  举报