> [TOC] > > [time=Sun, Dec 3, 2023 8:43 PM] # a067: uva12459. Bees' ancestors*** > http://140.113.72.36:207/ShowProblem?problemid=a067 > **費式數列** **用long long int** 計算 ```cpp= //a067: uva12459. Bees' ancestors #include <iostream> using namespace std; long long int f(int x)//計算結果很大 函數值要用long long int *** { long long int F[100]={};//存計算結果也要long long int *** for(int i=2;i<=x;i++) { F[0]=0; F[1]=1; F[i]=F[i-1]+F[i-2]; } return F[x]; } int main() { int g; while(cin>>g)//輸入多筆 { if(g==0) { break; } g++;//1=>1=f(2) 2=>2=f(3)*** cout<<f(g)<<endl; } return 0; } ``` # a081: uva.10018 Reverse and Add***** >http://140.113.72.36:207/ShowProblem?problemid=a081 >**要先reverse and add 一次 再reverse檢查** 這樣**t(預設是0)=1** >計算p的rev:<**(rev先重置為0)**> **rev往前一位再加上p的個位數** ```cpp= //a081: uva.10018 Reverse and Add #include <iostream> using namespace std; int reverse(int p)//反轉 *** { int rev=0;//重置 *** while(p!=0)//直到p=0時完成 *** { rev=rev*10+p%10;//rev往前移位後補上p的個位數*** p/=10;//p去掉個位數 *** } return rev;//回傳rev } int main() { int n,p; cin>>n; while(cin>>p) { int rev=reverse(p);//先做rev *** int t=0;//rev&add的次數 do{ t++; p+=rev;//相加 rev=reverse(p);//rev }while(p!=rev);//rev會比add多一次 最後一次是檢查p是否等於rev *** cout<<t<<" "<<p<<endl; } return 0; } ``` # a075: uva11388. GCD LCM *** >http://140.113.72.36:207/ShowProblem?problemid=a075 **if **l%g==0** , a=g ; b=l** ```cpp= //a075: uva11388. GCD LCM #include <iostream> using namespace std; int main() { int t,g,l; cin>>t; while(cin>>g>>l) { if(l%g==0)//l是g的倍數(by短除法) *** cout<<g<<" "<<l<<endl;//a是g的倍數,min(a)=g ; 又 a*b=g*l 故 b=l else cout<<"-1"<<endl; } return 0; } ``` # a055: uva10696. f91** >http://140.113.72.36:207/ShowProblem?problemid=a055 **if n<=100 ,cout<< 91 ; if n>=101.cout<< n-10** ```cpp= //a055: uva10696. f91 #include <iostream> using namespace std; int main() { int n; while(cin>>n) { if(n==0) { break; } if(n<=100) { cout<<"f91("<<n<<") = "<<"91"<<endl; } else if(n>=101) { cout<<"f91("<<n<<") = "<<n-10<<endl; } } return 0; } ``` # a060: uva11332. Summing Digits*** >http://140.113.72.36:207/ShowProblem?problemid=a060 >將各位數做加總到<**sum(預設是0)**>直到變成個位數(sum<10) ```cpp= //a060: uva11332. Summing Digits #include <iostream> using namespace std; int g(int n) { int sum=0;//重置 while(n!=0)//加總位數和 { sum+=n%10;//加上個位數 n/=10;//去掉個位數 } if(sum>=10)//不是個位數 { return g(sum);//再做一次*** } else if(sum<10)//個位數回傳 { return sum; } } int main() { int n; while(cin>>n) { if(n==0) { break; } cout<<g(n)<<endl; } return 0; } ``` # a070: uva155. All Squares***** >http://140.113.72.36:207/ShowProblem?problemid=a070 >判斷(n,m)是否位於大小為k的正方形內,**<ans(預設是0)>++;** **從中心點(1024,1024,k)開始 然後四個頂點遞迴 , k/2遞迴直到k變成0** ```cpp= //a070: uva155. All Squares #include <iostream> using namespace std; int k,n,m,ans;//全域變數 *** void dfs(int x,int y,int k)//不用回傳值*** { if(k==0)//k==0時停止 { return; } if(n>=x-k&&n<=x+k&&m>=y-k&&m<=y+k)//(n,m)在中心點為(x,y)大小為k的正方形內 { ans++; } dfs(x+k,y+k,k/2);//四頂點的小正方形 dfs(x+k,y-k,k/2); dfs(x-k,y+k,k/2); dfs(x-k,y-k,k/2); } int main() { while(cin>>k>>n>>m) { if(k==0&&n==0&&m==0) { break; } ans=0;//重置 dfs(1024,1024,k);//從最大的正方形開始 cout<<" "<<ans<<endl; } return 0; } ```