2017年5月6日 星期六

[C_SO42-易] 宵夜

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

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 月 */
}
#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 月 */
}

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

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

2017年5月3日 星期三

948 - Fibonaccimal Base

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=889

import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
ArrayList<Integer>fabList=new ArrayList<Integer>();
fabList.add(1);fabList.add(2);
int f=3;
while(f<=100000000){
fabList.add(f);
int i=fabList.size();
f=fabList.get(i-2)+fabList.get(i-1);
}
int n=scn.nextInt();
while(n--!=0){
int num=scn.nextInt(),lab=0,tot=0;
String ans="";
for(int i=fabList.size()-1;i>=0;i--){
if(fabList.get(i)<=num){
lab=i;
break;
}
}
for(int i=lab;i>=0;i--){
if(tot+fabList.get(i)>num){
ans+="0";
}else{
tot+=fabList.get(i);
ans+="1";
}
}
System.out.printf("%d = %s (fib)\n",num,ans);
}
}
/*題目:948 - Fibonaccimal Base
作者:1010
時間:西元 2017 年 5 月 */
}

這題簡單來說10
費事數列: 1 2 3 5 8

               0 1 0 0 1
Ans:10010
題目有說過最大值為
100000000所以建立該區間的費事數列