无相邻1问题
无相邻1问题
问题描述:
用1、2、3可构作n位数,计算其中没有相邻的1出现的个数。
输入:
输入文件中有若干行。每一行上有一个正整数n作为一个测试数据,(1<=n<=100)。
输入直到文件结束。
输出:
对输入文件中的每个测试数据,在输出文件输出没有相邻的1出现的n位数的个数。
输入样例:
3
4
1
输出样例
22
60
3
分析:设
#include<stdio.h>
#include<iostream>
#define MAXN 100
using namespace std;
char a[100][100];
//高精度加法
void add(char a[],char b[],char back[])
{
int i,j,k,up,x,y,z,l;
char *c;
if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
c=(char *) malloc(l*sizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x='0'; else x=a[i];
if(j<0) y='0'; else y=b[j];
z=x-'0'+y-'0';
if(up) z+=1;
if(z>9) {up=1;z%=10;} else up=0;
c[k++]=z+'0';
i--;j--;
}
if(up) c[k++]='1';
i=0;
c[k]='\0';
for(k-=1;k>=0;k--)
back[i++]=c[k];
back[i]='\0';
}
//打表,数据大,用高精度算的
void test()
{
a[1][0]='3';a[1][1]='\0';
a[2][0]='8';a[2][1]='\0';
for(int i=3;i<=MAXN;i++)
{
add(a[i-1],a[i-2],a[i]);
add(a[i-1],a[i],a[i]);
add(a[i-2],a[i],a[i]);
}
}
int main()
{
int n;
test();
while(scanf("%d",&n)!=EOF)
{
printf("%s\n",a[n]);
}
return 0;
}
人一我百!人十我万!永不放弃~~~怀着自信的心,去追逐梦想
浙公网安备 33010602011771号