【Coding日记】菜鸟编程C语言100例——第三题⚠️

今日收获------解数学方程➕如何将数学问题演变为编程验证问题

📚题目

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

🧠思路分析

😵‍💫先来看看标准答案(这道题,我是不会做)

👇

假设该数为 x。

1、则:x + 100 = n2, x + 100 + 168 = m2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。

7、接下来将 i 的所有数字循环计算即可。

🚀精选答案

注释版(新手友好版)

c 复制代码
#include <stdio.h>  // 引入输入输出库,printf需要用它
int main (void)  // 主函数,程序入口
{
    // 定义变量:
    // i、j:168的两个因数(对应n+m和n-m)
    // m、n:两个完全平方数的平方根(代码里的m/n和数学推导里的反过来)
    // x:我们要找的目标数
    int  i, j, m, n, x;
        // 枚举i的范围:i从1到168/2+1(即85)
    // 原因:i和j是168的因数对(i*j=168),i超过84后,j会小于i,会重复枚举(比如i=84,j=2 和 i=2,j=84是同一对)
    for (i = 1; i < 168 / 2 + 1; i++)
    {
        // 第一步:判断i是不是168的因数(能整除168)
        if (168 % i == 0)
        {
            // 如果是因数,计算另一个因数j = 168 / i
            j = 168 / i;
                        // 核心判断条件(对应我们聊的"都是偶数+大小关系"):
            // 1. i > j:保证只处理一次因数对(避免重复,比如i=28,j=6 和i=6,j=28只算一次)
            // 2. (i + j) % 2 == 0:i+j是偶数 → 对应我们说的"n-m和n+m同偶"
            // 3. (i - j) % 2 == 0:i-j是偶数 → 同上,进一步验证奇偶性
            if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)
            {
                // 解方程组:i = n+m,j = n-m → n=(i+j)/2,m=(i-j)/2(代码里的m/n)
                m = (i + j) / 2;  // 代码里的m = 数学里的n(大的平方根)
                n = (i - j) / 2;  // 代码里的n = 数学里的m(小的平方根)
                
                // 反推目标数x:x = 小平方根的平方 - 100(对应x = m² - 100)
                x = n * n - 100;
                
                // 打印结果:验证x+100是n²
                printf ("%d + 100 = %d * %d\n", x, n, n);
                // 打印结果:验证x+268是m²
                printf ("%d + 268 = %d * %d\n", x, m, m);
            }
        }
    }
    return 0;  // 程序正常结束
}

官网答案

c 复制代码
#include <stdio.h>
 
int main (void)
{
    int  i, j, m, n, x;
    for (i = 1; i < 168 / 2 + 1; i++)
    {
        if (168 % i == 0)
        {
            j = 168 / i;
            if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)
            {
                m = (i + j) / 2;
                n = (i - j) / 2;
                x = n * n - 100;
                printf ("%d + 100 = %d * %d\n", x, n, n);
                printf ("%d + 268 = %d * %d\n", x, m, m);
            }
        }
    }
    return 0;
}

🤕我的试错之旅

需求边界:

-输入:

-输出:一个整数

-规则边界:

1.逆运算------逆推演------解方程

2.X+100=Y^2

3.Y2+168=Z2

4.X+268=Z^2

解决方案:

-编程和解方程不一样------对变量赋值,不能用未定变量赋值,只能用具体数字赋值

-因此,这类解方程的逆推演的题目,就是自己先做一部分数学运算,得出具体数字,然后再编程

-编程只能枚举,穷举法------在数学中就是试数法(我们平时所说的笨方法),但是由于计算机的运行速度快,所以试数法在这里可行!

-但是,试数也不能瞎试,得有个范围,不能从-♾️到+♾️吧

-还有就是,在编程里面,还要验证平方根,平方数

-编程里面只能验证,两边计算结果是否相等,以此来验证平方根与奇偶数

-从定义出发:平方,两个相等的根相乘,也就是要么全是奇数,要么全是偶数,二者相等,我们试根

-我们两边都进行穷举(遍历,for)最后用if判断是否相等

-😳还是要,进行数学理论计算,来确定,我们的穷举范围,这才是解题关键点------已经可以确定是用穷举法了

-构造两数相乘等于一个固定数值,这样我们就可以通过合数因子来确定穷举范围

😵‍💫想不明白,不想了······

💬总结碎碎念

数学解方程问题,编程做不了

你想🧠,计算机诞生的牧师是什么?不就是为了帮助科学家做科学计算吗

做科研,不就是不断试错,在试错中"创新"吗

例如现在AI加持下的生物蛋白,实验,我们就可以加速"试错"------当然,听说现在也就有一种技术是"数字孪生",在仿真世界里面进行实验,模型实验成功了,我们再投入实际生产,从而降低成本

相关推荐
Wect5 小时前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP17 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱1 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub1 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
祈安_1 天前
C语言内存函数
c语言·后端
NAGNIP2 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试