close

題目概要:

找出某數的費氏數列,並表示成2進位。Ex 17=(100101)

Ex 17=13+3+1

13
1 0 0 1 1

解題方向:

1. 先建立費氏數列表。

2. 從表中找出與N(輸入的數字)相差最小的數字,並做相減,並使用一個字串紀錄,假如有相減到則是1,沒有減到則是0,一直迴圈,直到N=0為止。

程式碼:

//Java
import java.util.Scanner;
import java.util.Vector;
class main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int cases=sc.nextInt(); //總共多少case。
for(int i=0;i<cases;i++){
int n=sc.nextInt();
//建立費氏數列表。
Vector<Integer> vector=new Vector<Integer>();
vector.add(1);
if(n>1){
vector.add(2);
int temp=0;
while((temp=vector.elementAt(vector.size()-2)+vector.lastElement())<=n){
vector.add(temp);
}
}
String st=""; //紀錄2進位值。
int ntemp=n;
while(ntemp>=0 && !vector.isEmpty()){
if(vector.lastElement()<=ntemp){
st=st+"1"; //有相減到st紀錄1。
ntemp=ntemp-vector.lastElement(); //目前值-表中的最後一個數字。
}else{
st=st+"0"; //沒相減到st紀錄0。
}
vector.remove(vector.size()-1); //移除最後一個數字。因為上面都是抓取最後一個數字去做相減。
}
//Output
System.out.println(n+" = "+st+" (fib)");
}
}
}
view raw uva948.java hosted with ❤ by GitHub

arrow
arrow
    文章標籤
    Java
    全站熱搜
    創作者介紹
    創作者 a7069810 的頭像
    a7069810

    紀錄自己的程式人生

    a7069810 發表在 痞客邦 留言(0) 人氣()