> [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;
}
```