模拟练习--序列计数(蓝桥杯)

【问题描述】 小明想知道,满足以下条件的正整数序列的数量:

  1. 第一项为 n;
  2. 第二项不超过 n;
  3. 从第三项开始,每一项小于前两项的差的绝对值。 请计算,对于给定的 n,有多少种满足条件的序列。
    【输入格式】 输入一行包含一个整数 n。
    【输出格式】 输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
    【样例输入】
    4
    【样例输出】
    7
    【样例说明】
    以下是满足条件的序列:
    4 1
    4 1 1
    4 1 2
    4 2
    4 2 1
    4 3
    4 4

最开始做这道题的时候,最先想到的是用递归的方式解决这道题,但是写完代码后发现测试的样例范围很大,这样的方法只能过一般的评测。

#include <iostream>
#include <cmath>
using namespace std;
int pre=0,sum=0,a[1001]={0},book[1001]={0};
void search(int n,int deep)
{
 int i,j,len;
 if(deep==2)
 {
  for(i=1;i<=n;i++)
  {
   pre=n;
   /*
   a[1]=4;
   a[deep]=i;
   for(j=1;j<=deep;j++)
   {
    cout<<a[j]<<" ";
   }
   cout<<endl;
   */
   sum++;
   search(i,deep+1);
  }
 }
 len=abs(pre-n);
 if(deep>2)
 {
  for(i=1;i<len;i++)
  {
   pre=n;
   /*
   a[deep]=i;
   for(j=1;j<=deep;j++)
   {
    cout<<a[j]<<" ";
   }
   cout<<endl;
   */
   sum++;
   search(i,deep+1);
  }
 }
 return;
}
int main()
{
 int n;
 cin>>n;
 search(n,2);
 cout<<sum%10000<<endl;
 return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值