题解 | #搬水果#
搬水果
https://www.nowcoder.com/practice/e4c775b0f3ee42a4bb72c26d2e1eef8a
#include<stdio.h> #define maxsize 10000 int search(int a[], int m) { int mini = 0, min = a[0]; for (int j = 1; j < m; j++) { if (a[j] < min) { min = a[j]; //记录最小值 mini = j; } } a[mini] = a[m - 1]; //在原数组中,移除这个最小值(用最后一个元素来覆盖) return min; } int main() { int m; int a[maxsize]; while (scanf("%d", &m) != EOF) { int sum = 0, min1, min2; for (int i = 0; i < m; i++) scanf("%d", &a[i]); while (m > 1) { min1 = search(a, m); //最小值 m--; //在原数组中移除最小值。原数组中元素个数为m-1个 min2 = search(a, m); //次小值最后下标m sum = min1 + min2 + sum; //累计 a[m - 1] =min1+min2; //最小值和次小值的和作为原数组中的一个元素 m个元素 m-1 } printf("%d\n", sum); } return 0; }