瓷砖问题

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/这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值