8 solutions
-
0
每次取最小的两个数相乘+1最终结果会得到最大值,相反会得到最小值,因此,建立两个数组利用排序分别按从小到大以及从大到小的顺序排列
#include<stdio.h> #include<stdlib.h> #define ll long long //每次取最小的两个数最终可以得到max //每次取最大的两个数最终可以得到min int array[50002]; int attr[50002]; int comp(const void *a,const void *b){ return *(int *)a-*(int *)b; } int comp2(const void *a,const void *b){ return *(int *)b-*(int *)a; } int main(){ int n; int sum; int max; int min; int res; int length; int length2; int len; scanf("%d",&n); for(int i=0; i<n+1; i++){ scanf("%d",&array[i]); attr[i] = array[i]; } length = n; length2 = n; qsort(array,n,sizeof(int),comp);//调用排序函数 for(int i=0; i<n-1; i++){//2 4 5 6 max = array[i]*array[i+1]+1; array[i+1] = max; qsort(&array[i+1],--length,sizeof(int),comp); } qsort(attr,length2,sizeof(int),comp2); for(int i=0; i<n-1; i++){//2 4 5 6 min = attr[i]*attr[i+1]+1; attr[i+1] = min; qsort(&attr[i+1],--length2,sizeof(int),comp2); } printf("%d",max-min); }
Information
- ID
- 95
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 146
- Accepted
- 52
- Uploaded By