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;
}