程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Ray Through Glasses

Ray Through Glasses

編輯:C++入門知識

題意:給你一束光,問你在一個三層的平面類傳遞n次的種數;   仔細想下,就是一個fibonacci數列;    

#include<map>  
#include<set>  
#include<list>  
#include<cmath>  
#include<ctime>  
#include<deque>  
#include<stack>  
#include<bitset>  
#include<cstdio>  
#include<vector>  
#include<cstdlib>  
#include<cstring>  
#include<iomanip>  
#include<numeric>  
#include<sstream>  
#include<utility>  
#include<iostream>  
#include<algorithm>  
#include<functional>  
  
using namespace std ;  
  
vector<string> Fibs ;  
void CalFibs()  
{  
    const int maxn = 10000 ;  
    int carry , i , j  , size1 , size2 , num1 , num2 ;  
    string add1 , add2 ;  
    add1 = '1' ;  
    add2 = '2' ;  
    Fibs.push_back( add1 ) ;  
    Fibs.push_back( add2 ) ;  
    for( int k = 3 ; k <= maxn ; ++k )  
    {  
        string sum ;  
        carry = 0 ;  
        i = j = 0 ;  
        size1 = add1.size() ;  
        size2 = add2.size() ;  
        while( i < size1 || j < size2 )  
        {  
            if( i < size1 )  
            {  
                num1 = add1[ i ] - '0' ;  
                ++i ;  
            }  
            else  
            {  
                num1 = 0 ;  
            }  
            if( j < size2 )  
            {  
                num2 = add2[ j ] - '0' ;  
                ++ j ;  
            }  
            else  
            {  
                num2 = 0 ;  
            }  
            num1 += ( num2 + carry ) ;  
            carry = num1 / 10 ;  
            num1 %= 10 ;  
            sum.push_back( num1 + '0' ) ;  
        }  
        if( carry )  
        {  
            sum.push_back( carry + '0' ) ;  
        }  
        Fibs.push_back( sum ) ;  
        add1 = add2 ;  
        add2 = sum ;  
    }  
}  
  
int main()  
{  
    CalFibs() ;  
    int n , i ;  
    string result ;  
    while( cin >> i )  
    {  
        i += 2 ;  
        result = Fibs[ i - 1 ] ;  
        for( i = result.size() - 1 ; i >= 0 ; --i )  
        {  
            cout << result[ i ] ;  
        }  
        cout << endl ;  
    }  
    return 0;  
}  

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved