| 
 | 
 
 
发表于 2019-3-20 19:39:56
|
显示全部楼层
 
 
 
- #include <stdio.h>
 
 - #include <string.h>
 
  
- #define MAX_ARR_SIZE 256 
 
  
- struct SortArr {
 
 -         int arr[MAX_ARR_SIZE];
 
 -         int size;
 
 - };
 
  
- struct SortArr CreateSortArr(int* arr0, int size) {
 
 -         struct SortArr arr;
 
 -         arr.size = size;
 
 -         memcpy(arr.arr, arr0, size * sizeof(int));
 
 -         int i, j;
 
 -         for (i = 0; i < size - 1; ++i)
 
 -         for (j = i; j < size - 1; ++j) {
 
 -                 if (arr.arr[j] > arr.arr[j + 1]) {
 
 -                         int tmp = arr.arr[j];
 
 -                         arr.arr[j] = arr.arr[j + 1];
 
 -                         arr.arr[j + 1] = tmp;
 
 -                 }
 
 -         }
 
 -         return arr;
 
 - }
 
  
- void sortarr_insert(struct SortArr* arr,int num) {
 
 -         int p = 0;
 
 -         int q = arr->size;
 
 -         while (p < q) {
 
 -                 int n = (p + q) / 2;
 
 -                 if (num >= arr->arr[n]) p = n + 1;
 
 -                 else q = n;
 
 -         }
 
  
-         int i;
 
 -         for (i = arr->size; i > q; --i) {
 
 -                 arr->arr[i] = arr->arr[i - 1];
 
 -         }
 
 -         arr->arr[q] = num;
 
 -         arr->size++;
 
 - }
 
  
- void sortarr_erase(struct SortArr* arr,int i) {
 
 -         for (i; i < arr->size - 1; ++i) {
 
 -                 arr->arr[i] = arr->arr[i + 1];
 
 -         }
 
 -         arr->size--;
 
 - }
 
  
 
- int GetSum(int* arr0, int N) {
 
 -         struct SortArr arr=CreateSortArr(arr0,N);
 
  
-         int sum = 0;
 
 -         while (arr.size > 1) {
 
 -                 int a = arr.arr[0]+arr.arr[1];
 
 -                 sortarr_erase(&arr,0);
 
 -                 sortarr_erase(&arr,0);
 
 -                 sortarr_insert(&arr,a);
 
 -                 sum += a;
 
 -         }
 
 -         return sum;
 
 - }
 
  
- int main() {
 
 -         int ans[MAX_ARR_SIZE];
 
 -         int N = 0;
 
 -         do {
 
 -                 int arr[MAX_ARR_SIZE];
 
 -                 int arr_size;
 
 -                 scanf("%d", &arr_size);
 
 -                 if (arr_size <= 0) break;
 
 -                 int i;
 
 -                 for (i = 0; i < arr_size; ++i) {
 
 -                         scanf("%d", arr + i);
 
 -                 }
 
 -                 ans[N++] = GetSum(arr, arr_size);
 
 -         } while (1);
 
  
-         int i;
 
 -         for (i = 0; i < N; ++i) {
 
 -                 printf("%d\n", ans[i]);
 
 -         }
 
 - }
 
  复制代码 |   
 
 
 
 |