当前位置: 首页 > news >正文

抽象的算法0.1.3.2版本

前言: 公式:(基础 + 基础 + 基础 + ...更多的基础) × 维度(影响因素) = 问题

将问题分解成一个个基础和变量,便可轻松解决问题        ————不知名的作者

因为实在是写不出来了,所以直接借用大佬的代码去分析吧.......

先上代码java版

    void contextLoads() {
        int n = 15;//模拟输入
        n *= 2; // 将 n 乘以 2,等价于 n = n * 2
        int ans = 0; // 初始化结果计数器为 0

        // 遍历 x 从 1 到 sqrt(n),寻找 n 的因子对
        for (int x = 1; x <= (int) Math.sqrt(n); x++) {
            if (n % x != 0) { // 如果 x 不是 n 的因子,跳过后续操作
                continue;
            }
            // 判断 x 和 n/x 的奇偶性是否不同
            if ((x & 1) != ((n / x) & 1)) { // 位运算替代异或逻辑
                ans++; // 若奇偶性不同,计数加1
            }
        }
        System.out.println(ans); // 输出最终结果  当n=15时,结果为4,符合理论
    }

题目:爱的具体形状

Fort 问 Peat 有多爱他,Peat 说我爱你就像 nn 这个数这么大。

但是 Fort 不信,他要求 Peat 具体表示出 nn 这个数字。具体表示的方式为将 nn 拆分为一个,两个或多个连续正整数之和。

Fort 认为,nn 的具体表示方式越多,Peat 就越爱他。请你帮 Fort 求出 nn 有多少种具体表示的方式。

例如,当n=9 时,有三种具体表示方式,分别为 9=9,9=4+5,9=2+3+49=9,9=4+5,9=2+3+4。

                                                                                                                        题目来源:蓝桥杯

这道题的核心在于——连续的一组数字之和等于n(1 < n < 10的14次方),每有一组,爱的具体表示方式+1

在这个分析的基础上,我们看到大佬代码

int ans = 0;//用于计算爱的具体表示方式,从0开始

切入点是什么?是连续的一组数字之和,换一个说化,让你求1到100的中和该怎么求?

秒答:(首位 + 尾位)* 100相 除以 2 = 5050

变成公式就是\frac{d \left ( a + a +d - 1\right )}{2}

举例 1~100

100(1+1+100-1)= 100 * 101 = 10100 /2 =5050,符合

在这个公式的基础上,再来看看大佬的代码

n *= 2

公式要灵活多变d\left ( a+a+d-1\right ) = 2SUM

n是总和

n *= 2  转换一下就是  n = n * 2 ,就等于上面的公式中的 2SUM

for循环代表了从d开始,给了一个初始值 =1

公式要灵活多变!ad + ad + d^{^{2}} -1

d平方作为判断值

那么这里就有多种写法了

像大佬的代码采用的开根号

for (int x = 1; x <= (int) Math.sqrt(n); x++) { }

Math.sqrt(开根号)

x++就是重复

为什么大佬用判断奇偶就能知道了呢?

公式要灵活多变!通过循环和输入值,我们可以知道d和sum,a是公差

\left ( a+a+d+-1 \right ) = \frac{2 sum}{d}

2a = \frac{2sum}{d} + 1 - d

a = \frac{\frac{2sum} {d}+1-d}{2}

            if (n % x != 0) { // 如果 x 不是 n 的因子,跳过后续操作
                continue;
            }
            // 判断 x 和 n/x 的奇偶性是否不同
            if ((x & 1) != ((n / x) & 1)) { // 位运算替代异或逻辑
                ans++; // 若奇偶性不同,计数加1
            }

n % x

2sum / d     != 0

这个应该能看出来,0作为被除数,结果等于0

下面这个判断就是

2sum / d     !=  d

为什么不能相等呢?

核心要求连续的一组数字

如果单调性相同,13,24,他们是相同的一组数吗?不是

这道题的核心考点为等差数列求和,\frac{d \left ( a + a +d - 1\right )}{2} = n 的灵活运用

蓝桥杯答案

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long n = scanner.nextLong(); // 10的14次方,使用int会出现报错
        n *= 2;
        int ans = 0;

        // 遍历所有可能的因子x
        for (long x = 1; x <= (long) Math.sqrt(n); x++) {
            if (n % x != 0) {
                continue;
            }
            long y = n / x;
            // 判断奇偶性是否不同
            if ((x % 2) != (y % 2)) {
                ans++;
            }
        }
        System.out.println(ans);
        scanner.close();
    }
}

相关文章:

  • Flutter 完整开发指南
  • 【Qt】C++前向声明与Qt信号与槽的区别
  • 备赛蓝桥杯之第十六届模拟赛2期职业院校组第六题:菜谱教程
  • 【Python】天气数据可视化
  • 啸叫抑制(AFS)从算法仿真到工程源码实现-第八节-系统搭建
  • NVMe协议
  • Vue中动态搜索表单的「默认值」设计:从原理到最佳实践!!!
  • npm前端模块化编程
  • 【QT】QT中的中文显示乱码解决
  • TypeScript中的声明合并:与JavaScript的对比与实践指南
  • 基于 ffmpeg 实现合并视频
  • LlamaFactory部署及模型微调【win10环境】
  • 论坛系统自动化测试项目报告
  • 【JavaEE】Mybatis 传参与排序模糊查询
  • FDCAN应用说明
  • RAPTOR:如何用树状结构重塑RAG检索能力?
  • LangChain开发(八)自定义工具调用
  • RocketMQ可视化工具使用 - Dashboard(保姆级教程)
  • Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则
  • hugo+github pages 部署实验室网站
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • 孙卫东会见巴基斯坦驻华大使:支持巴印两国实现全面持久停火
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选
  • 字母哥动了离开的心思,他和雄鹿队的缘分早就到了头
  • 体坛联播|安切洛蒂执掌巴西男足,字母哥尝试离开雄鹿
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排