递归问题 2045
#include <stdio.h>
int main (void)
{
int n,i;
long long a[51];
a[1]=3;
a[2]=6;
a[3]=6;
for(i=4; i<51; i++)
{
a[i]=a[i-1]+2*a[i-2];
}
while(scanf("%d",&n)!=EOF)
{
printf("%lld\n",a[n]);
}
return 0;
}
递推问题 2047
当已知n=1,以及n=2时 就很好做了 n>=3时
已n块为突破点 n块只有三种E F O,将每种字符取到的情况相加就是总共的情况了
不管n-1块是什么字符 n块总可以取E或F 所以就有2*a[n-1]
如果n为O时 那么不管n-2块为什么字符 n-1总能取到E或F 这时就有2*a[n-2];
所以a[n]=2*(a[n-1]+a[n-2]);
#include <stdio.h>
int main()
{
int n;
long long int a[1000];//注意数据类型
a[1]=3;
a[2]=8;
while(scanf("%d",&n)!=EOF)
{
for(int i=3;i<=n;i++)
{
a[i]=2*(a[i-1]+a[i-2]);
}
printf("%lld\n",a[n]);
}
return 0;
}
错排问题2048
假设前n-1个都已经是错排了,总共有f(n-1)种。那么,把第n个放到这个错排中,会有两种情况:
第一:与n的位置交换。假设将第n个元素放在某一位置m,m位置的元素放在n的位置。这样的方法有(n-1)*f(n-1)种
第二:与n交换后的m位置的元素不放在n的位置。这样的方法有(n-1)*f(n-2)中
所以,总共有(n-1)*(f(n-1)×f(n-2))种方法。
#include <stdio.h>
int a[100000];
int main(void)
{
long long n,m;
while (scanf("%lld",&n)!= EOF)
{
long long index = 0;
while(n >0)//注意
{
a[index ++] = n % 2;
n/=2;
}
//printf("%d\n",index);
for(int i=index-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
绘出长方形
#include <stdio.h>
int main(void)
{
int m,n,a,b;
while(scanf("%d %d",&m,&n)!=EOF){
a=m+2;
b=n+2;
for(int i=0;i<b;i++)
{
for(int j=0;j<a;j++)
{
if((i==0 && j==a-1)||(i==b-1 && j==a-1) || (i==b-1 && j==0) || (i==0 && j==0))
{
printf("+");
}
else if(i!=0 &&(j==0 || j==a-1))
{
printf("|");
}
else if((i==0 || i== b-1) && (j != 0 && j!= a-1))
{
printf("-");
}
else
{
printf(" ");
}
}
printf("\n");
//printf("\n");
}
printf("\n");}
return 0;
}
2053
#include <iostream>
using namespace std;
int main(void)
{
long long n;
while(cin >> n)
{
int count=0;
for(int i=1;i<=n;i++)
{
if(n%i==0)
{
count ++;
}
}
if(count % 2==0)
{
cout << 0 <<endl;
}
else
{
cout << 1 << endl;
}
}
return 0;
}
2055
/*输入n,用for循环循环n次,定义一个函数计算函数f(x),
大学字母时,f(x)=x-64,小写字母时等于-f(x-32),
然后输出。*/
#include <iostream>
int f(int);
using namespace std;
int main(void)
{
int n;
cin >>n;
while(n--)
{
char x; int y;
cin >> x >> y;
cout << f(x) + y << endl;
}
return 0;
}
int f(int a)
{
if(a <= 90)
return a-64;
else
return -f(a-32);
}