藍橋杯 算法訓練 最小乘積(基本型) java

試題 算法訓練 最小乘積(基本型)

資源限制
時間限制:1.0s 內存限制:512.0MB
問題描述
  給兩組數,各n個。
  請調整每組數的排列順序,使得兩組數據相同下標元素對應相乘,然後相加的和最小。要求程序輸出這個最小值。
  例如兩組數分別爲:1 3  -5和-2 4 1

那麼對應乘積取和的最小值應爲:
  (-5) * 4 + 3 * (-2) + 1 * 1 = -25
輸入格式
  第一個行一個數T表示數據組數。後面每組數據,先讀入一個n,接下來兩行每行n個數,每個數的絕對值小於等於1000。
  n<=8,T<=1000
輸出格式
  一個數表示答案。
樣例輸入
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1

樣例輸出

-25
6

//解題思路:得到最小值是二個數組中一個數組最大值乘另一個數組最小值
package Main;

import java.util.Scanner;

public class Main {
  
	public static void main(String[] args) {   
      Scanner scanner=new Scanner(System.in);  
      //接收有多少相乘的成對數組  
     	int n=scanner.nextInt();
     	 //接收相乘的成對數組最小數
     	int[] summin=new int[n];
     	for (int i = 0; i < n; i++) {
     		 //接收相乘的成對數組長度  
     		int s=scanner.nextInt();
     		 //接收相乘的成對數組第一組
     		int[] a=new int[s];
     		 //接收相乘的成對數組第二組  
     		int[] b=new int[s];
     		
     		for (int j = 0; j <s; j++) {
     			a[j]=scanner.nextInt();
				
			}
     		for (int j = 0; j <s; j++) {
     			b[j]=scanner.nextInt();
				
			}
     		
     		for (int j2 = 0; j2 < s; j2++) {
				for (int k = 0; k <s-1; k++) {
					 //相乘的成對數組第一組進行從大到小排列
					if(a[k+1]>a[k]) {
						int aa=a[k];
						a[k]=a[k+1];
						a[k+1]=aa;
					}
					 //相乘的成對數組第二組進行從小到大排列
					if(b[k+1]<b[k]) {
						int bb=b[k];
						b[k]=b[k+1];
						b[k+1]=bb;
					}
					
				}
				
			}
     		int sum=0;
     		//對排序的a,b數組進行相乘
     		for (int j = 0; j < s; j++) {
			     sum=sum+a[j]*b[j];
			}
     		
     		summin[i]=sum;
			
		}
     	//輸出結果
     	for (int i = 0; i <n; i++) {
			System.out.println(summin[i]);	
		}
    scanner.close();
	}	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章