andy6804tw
5/6/2017 - 2:49 PM

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=21745 這題是考智力測驗= ( 網路搜尋提燈龍過河或是傳教士與食人族過河都是很經典的題目 這題考法也類似,若以很直覺的每次跟最小權重過去勢必不是最

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=21745

這題是考智力測驗= ( 網路搜尋提燈龍過河或是傳教士與食人族過河都是很經典的題目 這題考法也類似,若以很直覺的每次跟最小權重過去勢必不是最佳解,如下圖:

切記前提記得要排序,而且若單純case1下去做也不一定是最佳解 ex: 1 98 99 100 這時要以case2下去做,也就是最直覺方法才是最佳解

#include<stdlib.h>
int compare(const void *arg1, const void *arg2) {
  return  (*(int *)arg1 - *(int *)arg2);
}
int main(){
	int n=0,arr[4],i=0;
	scanf("%d",&n);
	while(n--){
		for(i=0;i<4;i++)
			scanf("%d",&arr[i]); 
		qsort((void *)arr, 4, sizeof(int), compare);//排序
		int x=arr[0]*2+arr[1]+arr[2]+arr[3],y=arr[1]*3+arr[0]+arr[3];
		printf("%d\n",x>y?y:x); 
	}
		/*題目:[C_SO42-易] 宵夜 C語言寫法
    作者:1010
    時間:西元 2017 年 5 月 */
} 
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner scn=new Scanner(System.in);
		int n=scn.nextInt(),arr[]=new int[4];
		while(n--!=0){
			for(int i=0;i<4;i++)
				arr[i]=scn.nextInt();
			Arrays.sort(arr);//排序
			int x=arr[0]*2+arr[1]+arr[2]+arr[3],y=arr[1]*3+arr[0]+arr[3];
			System.out.printf("%d\n",x>y?y:x);
		}
	}
		/*題目:[C_SO42-易] 宵夜 JAVA寫法
    作者:1010
    時間:西元 2017 年 5 月 */
}