1.http://www.tsinsen.com/A1023
算法有难度,需要用递归但是写出来不难,也没有细节问题
#include <iostream>
using namespace std;
int fun(int n)
{
if(n>2)
{
return fun(n-1)+fun(n-2);
}
else if(n==2)
{
return 2;
}
else
{
return 1;
}
}
int main()
{
int n;
cin>>n;
cout<<fun(n);
return 0;
}
主要就是递归并非简单的分为f4=f1+f3,f4=f2+f2,f4=f3+f2;或者类似的。递归是第一块瓷砖的值可以选择为1或者二,这样保证了不重不漏。所以有递归公式fn=fn-1+fn-2;
2.题目1024http://www.tsinsen.com/A1024
#include <iostream>
using namespace std;
//flag=false上一个不是一
int sum=0;
int fun(int n,bool flag)
{
if(n>3&&!flag)
{
int d=fun(n-1,true);
sum=sum+d;
// cout<<" d " << d<<"sum "<<sum<<" n "<<n<<endl;
return d+fun(n-2,false)+fun(n-3,false);
}
else if(n>3&&flag)
{
return fun(n-2,false)+fun(n-3,false);
}
else if(n==3&&!flag)
{
sum=sum+2;
// cout<<sum-2<<"sum "<<sum<<" n "<<n<<endl;
return 3;
}
else if(n==3&&flag)
{
sum=sum+1;
// cout<<sum-1<<"sum "<<sum<<" n "<<n<<endl;
return 2;
}
else if(n==2&&!flag)
{
return 1;
}
else if(n==2&&flag)
{
return 1;
}
else if(n==1&&!flag)
{
sum++;
// cout<<sum-1<<"sum "<<sum<<" n "<<n<<endl;
return 1;
}
else
{
return 0;
}
}
int main()
{
int n;
cin>>n;
cout<<fun(n,false)<<endl;
cout<<sum;
return 0;
}
错误:
1.如果有至少两个分支1+2+3,1+3+2..,那么一的个数应该是分支个数,sum=sum+d。
2.最后的小尾巴,也就是决定这条路能不能铺成,有几种方法的细节要处理好
3.如果用到下一侧迭代返回的参数,比如sum=sum+f(n-1)要将fn-1赋值到常数,再用,因为调用两次就会出错
4.写的太着急,就会不注意细节,纠错其实更费事
2.1025
用字符串char a[10],b[10];来比较。
strcmp(a,b)不分大小写,反悔0是相同,stricmp区分大小写,是windows的。详见: