情報オリンピックの1冊の通1208:2のべき乗の次の方は表します

1193 ワード

1208:2のべき乗次数は【題目説明】いずれの正の整数も2のべき乗次数で表すことができる.例:
137=27+23+20
同時に、abはa(b)と表すことができる.このことから、137は、
2(7)+2(3)+2(0)
さらに:7=22+2+20(21は2で表す)
3=2+20
最後の137は、
2(2(2)+2+2(0))+2(2+2(0))+2(0)
次のようになります.
1315=210+28+25+2+1
したがって、1315は、以下のように表すことができる.
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
【入力】正の整数n(n≦20000).
【出力】1行、所定のnの0,2に該当する(表示にスペースは使用できません).
【入力サンプル】137【出力サンプル】2(2)+2+2(0))+2(2+2(0))+2(0))+2(0)方法1(方法2の改良版、1つの再帰関数で):
//1208:2      
#include
int i,a[15],num;
using namespace std;

void dfs(int n)
{
	int k;
	for(k=14;k>=0;k--)
	{
		if(a[k]<=n)//     ,   
		break;	
	}
	//  2 k  
	if(k==0) //  2 0   
	{
		cout<=3 ,      
	{
		//  "2(k)",  k    dfs(k)         
		cout<>num;
	dfs(num);
    return 0;
}


方法2(2つの再帰関数を使って、利点は面倒です):
//1208:2      
#include
int i,a[15],num;
using namespace std;
void dfs(int n);
void pr(int k) //  2 k   
{
	if(k==0) cout<=0;k--)
	{
		if(a[k]<=n)//     ,   
		break;	
	}
	//  2 k  
	if(k!=1)// k   1 ,2 k      "2(k)"  , 
	{
		cout<>num;
	dfs(num);
    return 0;
}