编程实践之类似斐波拉契的序列题

来源:互联网 发布:淘宝天天特价入口 编辑:程序博客网 时间:2024/06/07 17:40

Description
数列A满足An = An-1 + An-2 + An-3, n >= 3

编写程序,给定A0, A1 和 A2, 计算A99

Input
输入包含多行数据

每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束

Output
对于输入的每一行输出A99的值

Sample Input

1 1 1

Sample Output

69087442470169316923566147
来自poj3982
我的代码:

import java.util.*;public class 序列 {    public static void main(String[] args) {        // TODO Auto-generated method stub      Scanner sc=new Scanner(System.in);      while(sc.hasNext()){          String D;          int a=sc.nextInt();          int b=sc.nextInt();          int c=sc.nextInt();//        int d=sc.nextInt();          String A=reverse(a+"");          String B=reverse(b+"");          String C=reverse(c+"");          for(int i=0;i<97;i++){              D=C;              C=sum(A,B,C);              A=B;              B=D;//            for(int j=C.length()-1;j>=0;j--)//                System.out.print(C.charAt(j));//            System.out.print(" ");          }//        System.out.println("输出:");          for(int i=C.length()-1;i>=0;i--)              System.out.print(C.charAt(i));          System.out.println();      }    }    static String sum(String A,String B,String C){        int i=0;        int a,b,c;        int sum=0;        int j=0;        int r=0;        String s="";        while(i<A.length()||i<B.length()||i<C.length()){            if(i<A.length()){                a=A.charAt(i)-'0';            }            else                a=0;            if(i<B.length()){                b=B.charAt(i)-'0';            }            else                b=0;            if(i<C.length()){                c=C.charAt(i)-'0';            }            else                c=0;            sum=a+b+c+j;            r=sum%10;                   s=s+r+"";            i++;            j=sum/10;        }        if(j>0)            s=s+j+"";        return s;    }    static String reverse(String s){        char[] str=s.toCharArray();        Stack<Character> stack=new Stack<Character>();        for(int i=0;i<str.length;i++){            stack.push(str[i]);        }        String reversed="";        for(int i=0;i<str.length;i++){            reversed+=stack.pop();        }        return reversed;    }}

但是在效率上看来显然不如别人用C或C++的代码,有时间再优化一下。

0 0
原创粉丝点击