输入:
三行:
第一行:n,表示数组的个数
第二行:数组a各个元素的值
第三行:数组b各个元素的值
输出:
式子:a[0]*b[0]+a[1]*b[1]+...a[n-1]*b[n-1];的最小值
其中数组a中元素顺序可以调整
eg:
3
1 1 3
10 20 30
输出80
Solution:
#include<stdio.h>
#include<stdlib.h>int main() {int N;scanf("%d", &N);int *a = (int *)malloc(sizeof(int) *N);int *b = (int *)malloc(sizeof(int) *N);int *book1 = (int *)malloc(sizeof(int) *N);int *book2 = (int *)malloc(sizeof(int) *N);for (int i = 0; i < N; i++) {scanf("%d", &a[i]);book1[i] = 0;book2[i] = 0;}for (int i = 0; i < N; i++) {scanf("%d", &b[i]);}int min_of_a;int max_of_b;int result = 0;int count = 0;int temp;int label_a = 0;int label_b = 0;while (count < N) {for (; label_a < N; label_a++) {if (book1[label_a] == 0) {min_of_a = a[label_a];break;}}for (; label_b < N; label_b++) {if (book2[label_b] == 0) {max_of_b = b[label_b];break;}}for (int i = 0; i < N; i++) {if (min_of_a >=a[i] && book1[i] == 0) {min_of_a = a[i];temp = i;}}book1[temp] = 1;for (int i = 0; i < N; i++) {if (max_of_b <= b[i] && book2[i] == 0) {max_of_b = b[i];temp = i;}}book2[temp] = 1;result += min_of_a * max_of_b;count++;}printf("%d\n", result);free(a);free(b);free(book1);free(book2);return 0;
}
思路:
用a的最小值与b的最大值相乘