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

编程练习:探索数学问题的编程解决方案 P137

文章目录

    • 1. 最大公约数和最小公倍数
    • 2. 水仙花数
    • 3. 完数
    • 4. 自由落体球
    • 5. 猴子吃桃问题
    • 6. 寻找素数


1. 最大公约数和最小公倍数

问题描述:给定两个正整数m和n,求它们的最大公约数(GCD)和最小公倍数(LCM)。

代码实现

#include <stdio.h>

// 函数:求最大公约数
int gcd(int a, int b) {
    while (b != 0) {
        int t = b;
        b = a % b;
        a = t;
    }
    return a;
}

// 函数:求最小公倍数
int lcm(int a, int b) {
    return (a / gcd(a, b)) * b; // 使用 GCD 计算 LCM
}

int main() {
    int m, n;
    printf("请输入两个正整数 m 和 n:");
    scanf("%d %d", &m, &n);

    printf("最大公约数: %d\n", gcd(m, n));
    printf("最小公倍数: %d\n", lcm(m, n));

    return 0;
}

2. 水仙花数

问题描述:一个三位数,其各位数字的立方和等于该数本身。

代码实现

#include <stdio.h>

int main() {
    int num, hundreds, tens, units;

    printf("1000以内的水仙花数有:\n");

    for (num = 100; num < 1000; num++) {
        // 分解每个三位数的各位数字
        hundreds = num / 100;           // 百位
        tens = (num / 10) % 10;         // 十位
        units = num % 10;               // 个位

        // 计算立方和
        if (hundreds * hundreds * hundreds +
            tens * tens * tens +
            units * units * units == num) {
            printf("%d\n", num);
        }
    }

    return 0;
}

3. 完数

问题描述:一个数如果恰好等于它的因子之和,这个数就称为“完数”。

代码实现

#include <stdio.h>

// 函数用于找出一个数的所有因子并判断是否为完数
void findPerfectNumbers(int limit) {
    for (int num = 1; num < limit; num++) {
        int sum = 0; // 用于存储因子之和
        // 找出num的所有因子
        for (int i = 1; i <= num / 2; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }
        // 如果因子之和等于原数,说明是完数
        if (sum == num) {
            printf("%d its factors are", num);
            // 输出完数的所有因子
            for (int i = 1; i <= num / 2; i++) {
                if (num % i == 0) {
                    if (i == 1) {
                        printf(" %d", i); // 第一个因子前不加逗号
                    } else {
                        printf(",%d", i); // 之后的因子前加逗号
                    }
                }
            }
            printf(".\n"); // 换行
        }
    }
}

int main() {
    int limit = 1000; // 定义上限为1000
    printf("1000之内的完数及其因子如下:\n");
    findPerfectNumbers(limit);
    return 0;
}

4. 自由落体球

问题描述:一个球从100m高度自由落下,每次落地后反弹回原高度的一半。

代码实现

#include <stdio.h>

int main() {
    double height = 100; // 初始高度为100米
    double totalDistance = 0; // 总经过的距离初始化为0
    double reboundHeight = 0; // 第10次反弹的高度初始化为0

    // 循环计算每次落地和反弹的距离,直到第10次落地
    for (int i = 0; i < 10; i++) {
        totalDistance += height; // 累加每次下落的距离
        height /= 2; // 每次落地后反弹的高度是上次高度的一半
        if (i < 9) {
            totalDistance += height; // 除了最后一次落地,每次落地后还要加上反弹的距离
        }
    }

    // 计算第10次反弹的高度
    reboundHeight = height / 2;

    // 输出总经过的距离和第10次反弹的高度
    printf("第10次落地后总共经过的距离:%.2f米\n", totalDistance);
    printf("第10次反弹的高度:%.2f米\n", reboundHeight);

    return 0;
}

5. 猴子吃桃问题

问题描述:猴子第1天摘下若干个桃子,每天吃掉一半再加一个。

代码实现

#include <stdio.h>

int main() {
    int peaches = 1; // 第10天剩下的桃子数
    for (int day = 10; day > 1; day--) {
        peaches = (peaches + 1) * 2; // 逆推前一天的桃子数
    }
    printf("第1天共摘了%d个桃子。\n", peaches);
    return 0;
}

6. 寻找素数

问题描述:求100~1000的全部素数。

代码实现

#include <stdio.h>
#include <math.h>

int main() {
    int i, j, flag, count = 0; // 添加计数器count
    for (i = 100; i <= 1000; i++) {
        flag = 1; // 假设i是素数
        for (j = 2; j <= sqrt(i); j++) {
            if (i % j == 0) {
                flag = 0; // 如果i能被j整除,则i不是素数
                break;
            }
        }
        if (flag) {
            printf("%d ", i);
            count++; // 输出一个素数后计数器加1
            if (count % 5 == 0) { // 每输出五个素数换一行
                printf("\n");
            }
        }
    }
    if (count % 5 != 0) { // 如果最后一行不足五个数,也要换行
        printf("\n");
    }
    return 0;
}

http://www.kler.cn/news/325130.html

相关文章:

  • Unity中的功能解释(数学位置相关和事件)
  • android13 系统默认设置静态IP
  • VMware下Ubuntu找不到共享文件夹
  • 4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
  • Latex 自定义运算符加限定条件的实现
  • WPF入门教学十 资源与字典
  • Rust结构体初探
  • linux中实现多路复用服务器
  • 使用Python创建EXE运行器和截图工具
  • 【数据结构和算法实践-排序-总结】
  • 9.24作业
  • Uniapp 打包后的横屏控制
  • 【JavaEE初阶】多线程7(面试要点)
  • MacOS安装MindSpore(2024年最新)
  • 创意实现!在uni-app小程序商品详情页轮播中嵌入视频播放功能
  • 成都睿明智科技有限公司可靠吗?
  • SpringBoot--为什么Controller是串行的?怎样才能并行?
  • uni-app之旅-day01-home页
  • Python 课程18-SQLAlchemy
  • Stable Diffusion绘画 | LCM模型:实现秒出图
  • 多旋翼无人机光伏发电站吊运技术详解
  • nodejs基于vue电子产品商城销售网站的设计与实现 _bugfu
  • 19 vue3之自定义指令Directive按钮鉴权
  • Qt --- 其他控件的介绍 --- 多元素控件
  • 【在Linux世界中追寻伟大的One Piece】验证TCP
  • 数据工程师岗位常见面试问题-1(附回答)
  • yolo自动化项目实例解析(七)自建UI--工具栏选项
  • 【JavaEE初阶】深入解析单例模式中的饿汉模式,懒汉模式的实现以及线程安全问题
  • IDEA服务启动时无法输出日志
  • 用C++游戏开发