關於藍橋OJ演算法訓練之最小乘積(基本型)
阿新 • • 發佈:2018-12-30
對於此題,我的思路是十字交叉法,即最大的乘上最小的,最小的乘上最大的,然後求和得出結果。當然,在這一步必須建立在已經將所輸入的數字排好序的基礎上。
提交OJ也是100分。
#include<stdio.h> #define T 1009 void queue(int b[],int m) { int i , j ,q; for(i = 0 ; i < m ; i ++) for(j = 0 ; j < m - i - 1; j ++) { if (b[j] > b[j + 1]) q = b[j+1] , b[j+1] = b[j],b[j] = q; } } int main() { int N ; scanf("%d",&N); int temp_N = N ; while(temp_N--){ int n , i , j ; scanf("%d",&n); int a[2][T]; for(j = 0 ; j < 2 ; j ++) for(i = 0 ; i < n ; i ++) scanf("%d",&a[j][i]); for(j = 0 ; j < 2 ; j ++) queue(a[j],n); long long sum = 0 ; for(i = 0 , j = n - 1 ; i < n && j > -1 ; i ++ , j --) sum += a[0][i] * a[1][j]; printf("%d",sum); printf("\n"); } return 0 ; }