瓷砖问题

来源:互联网 发布:常用的办公软件 编辑:程序博客网 时间:2024/06/02 19:42

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的。详见:

http://c.biancheng.net/cpp/html/2713.html
3.不想在这里更了,老给我放广告,还不给我钱,just kidding 主要原因是看起来花花的,我自己都不愿意看第二遍,本来排版就够对不起人民的了。于是换到http://www.cnblogs.com/这里

0 0
原创粉丝点击