---
# System prepended metadata

title: W5
tags: [void, recursion, function, for, "if\_", while]

---

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