java蓝桥杯校内模拟赛_蓝桥杯—校内模拟赛(规律序列)

蓝桥杯—校内模拟赛(规律序列)

问题描述:

小明想知道,满足以下条件的正整数序列的数量:

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

评测用例规模与约定:

对于 20% 的评测用例,1 <= n <= 5;

对于 50% 的评测用例,1 <= n <= 10;

对于 80% 的评测用例,1 <= n <= 100;

对于所有评测用例,1 <= n <= 1000。

思路:

① 研究对象始终都是只有三项,所以用大小为3的数组用来存放研究的三个对象。——序列长度未知,所以考虑递归的思想。

② 第一项、第二项的确定规则和第三项和后面的确定规则不同,观察得出,长度只有2的序列只有n(输入的第一项n)个。

注:

由于不知道具体测试用例数据,所以本人也无法确定答案是否完全正确。自己手动算出1——5的数据输入,测试出答案正确。

但是根据题目给出的评测用例规模和约定。

当输入数据较大时,本答案会超时。

如果有大神做出完美答案,拜托评论留下。

bc0b84d8e0f1dca4e686af8d83646dd4.png

1 importjava.util.Scanner;2

3 public classMain{4 static intn,out;5 public static voidmain(String[] args) {6 Scanner scan = newScanner(System.in);7 n =scan.nextInt();8 out = 0;9 int[] arr = new int[3]; //arr用于存放一直变化的长度为3的序列研究对象

10 arr[0] =n;11 for(int i = 1; i <= n; i++) {12 arr[1] =i;13 f(arr[0], arr[1]);14 }15 System.out.println((out+n)%10000); //加上的n是,序列长度为2的所有序列数量。

16 scan.close();17 }18 private static void f(int arr0, intarr1) {19 //TODO Auto-generated method stub

20 for(int i = 1; i <= n; i++) {21 if(i

30 if(i>j) return i-j;31 else return j-i;32 }33 }

_____________________

输入:3    输出:4

满足条件的序列:

3 1

3 1 1

3 2

3 3

———————————

输入:5    输出:14

满足条件的序列:

5 1

5 1 1

5 1 5

5 1 3

5 1 3 1

5 1 3 1 1

5 2

5 2 1

5 2 2

5 3

5 3 1

5 3 1 1

5 4

5 5

———————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值