蓝桥打卡-day7

题解1、三角回文数 - 蓝桥云课 (lanqiao.cn)

问题描述
对于正整数n如果存在正整数 使得n=1+2+3+···+kk(k+1),则n称为三角数。例如,66066 是一个三角数,因为 66066 =1+2+3+···+363
如果一个整数从左到右读出所有数位上的数字与从右到左读出所有数位上的数字是一样的,则称这个数为回文数。例如,66066 是一个回文数8778 也是一个回文数。
如果一个整数 n既是三角数又是回文数我们称它为三角回文数。例如66066 是三角回文数
请问,第一个大于 20220514 的三角回文数是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数填写多余的内容将无法得分。
运行限制
最大运行时间: 1s
最大运行内存:256M

读题思路

需要一个方法判断回文数、还需要一个方法判断三角

代码思路

代码从20220515开始++,分别调用俩个方法判断满足ans++;

答案 :

public class Main {
    public static void main(String[] args) {
        for(int i = 20220515 ; ;i++){
          if(isHuiW(i) && isSanJ(i)){
            System.out.println(i);
            return;
          }
        }
    }
   static boolean isSanJ(int n){
        int k = (int)Math.sqrt(2*n)-1;
        while (k*(k+1) <= n * 2){
            if (k*(k+1) == n * 2){
                return true;
            }
            k++;
        }
        return false;
    }

    static boolean isHuiW(int n){
        char[] arr = (n + "").toCharArray();
        int l = 0 , r = arr.length-1;
        while (l <= r){
            if(arr[l++] != arr[r--]) return false;
        }
        return true;
    }
}

题解2、数数 - 蓝桥云课 (lanqiao.cn)

问题描述
任何一个大于1的正整数都能被分解为若千个质数相乘,比如2822x7被分解为了三个质数相乘。请问在区间[2333333,23333333] 中有多少个正整数可以被分解为12个质数相乘?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
运行限制
最大运行时间: 1s
最大运行内存:512M

读题思路

woc、12个质数慌的一批。通过各位大佬的帖子看懂了;

读题正整数都能被分解为若千个质数相乘所以让它除于从2开始的数,没有余数就ans++;

代码思路

for 从2333333到23333333 让这些数去对质数求余,如果等于0,那这个数就是质数,ans++,然后再除等这个质数;不等于的这个数不是质数; 但是特殊情况5,有一些数对5求余就不等于0,所以最后如果余数>1;ans++;如果等于12;返回一个true;主函数记录一下;

public class Main {
    public static void main(String[] args) {
        //int ans  = 0;
        // for(int i = 2333333 ; i < 23333333 ; i++){
        //   if(check(i)) ans++;
        // }
        System.out.println(25606);
    }
    static boolean check(int n){
      int ans = 0;
      for(int i = 2; i*i < n; i++){
        while(n%i == 0){
          ans++;
          n /= i;
        }
      }
      if(n > 1) ans++;
      if(ans == 12) return true;
      else return false;
    }
}

题解3、数组切分 - 蓝桥云课 (lanqiao.cn)

这俩天dp看到的全是二维,结果……

问题描述
已知一个长度为 N 的数组: A1,42,43,..An 恰好是1~N的一个排列。现在要求你将 A 数组切分成若干个(最少一个,最多 个)连续的子数组,并且每个子数组中包含的整数恰好可以组成一段连续的自然数。
例如对于 A=1,3,2,4,一共有 5 种切分方法
1324:每个单独的数显然是(长度为1的)一段连续的自然数
133,24): 3,2包含2到3,是一段连续的自然数,另外1和4显然 也是。
[13,2,4: 3,2,4 包含2到4,是一段连续的自然数,另外1显然也是。
1,3,214: 1,3,2包含 1到3,是一段连续的自然数,另外 4 显然也是。
1,3,2,4:只有一个子数组,包含 1到4,是一段连续的自然数
输入格式
第一行包含一个整数N 。第二行包含 个整数代表 A数组。
输出格式
输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007取模后的值

读题思路 DP

寻找切分数组、可以用max - min == i - j;

设两层循环,一层i表示左端点,第二层j表示右端点。

dp还没学透、emm

代码思路:

建立一个俩个for,一个arr数组遍历;宁外一个dp数组用来记录次数;输出dp[n];

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
  static int mod = 1000000007;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        int[] a = new int[n+1];
        for(int i = 1 ; i <= n ; i++) a[i] = scan.nextInt();
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for(int i = 1 ; i <= n ; i++){
          int max = Integer.MIN_VALUE,min = Integer.MAX_VALUE;
          for(int j = i ; j > 0; j--){
            max = Math.max(max , a[j]);
            min = Math.min(min , a[j]);
            if(max-min == i-j) dp[i] = (dp[i]+dp[j-1]) % mod;
          }
        }
    System.out.println(dp[n]);
    }
}

AC截图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

续写少年!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值