【C++代码之美】你不得不知道的经典代码

news2024/11/27 12:38:30

1.斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

如下代码是15阶的斐波那契数列:

代码如下:

#include <iostream>

using namespace std;

int main() {
    int arr[15]; // 定义一个长度为15的整型数组
    arr[0] = 1; // 数列的第一个数字为1
    arr[1] = 1; // 数列的第二个数字为1
    for (int i = 2; i < 15; i++) { // 从第三个数字开始计算
        arr[i] = arr[i - 2] + arr[i - 1]; // 数列中每个数字都是前两个数字之和
    }
    for (int i = 0; i < 15; i++) { // 输出数列中的每个数字
        cout << arr[i] << endl;
    }
    cout << endl; // 换行
    return 0;
}

输出结果:

在这里插入图片描述

2.水仙花数

题目:

打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

例如:

153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

代码如下:

#include <iostream> // 引入iostream库,用于输入输出

using namespace std; // 使用std命名空间

int main(int argc, const char *argv[]) // 主函数
{
    for(int i=1;i<10;i++){ // 循环i从1到9
        for (int j=0;j<10;j++){ // 循环j从0到9
            for (int k=0;k<10;k++){ // 循环k从0到9
                if(i*i*i+j*j*j+k*k*k==i*100+j*10+k) // 如果i的三次方加上j的三次方加上k的三次方等于i乘以100加上j乘以10加上k
                cout << i*100+j*10+k << endl; // 输出i乘以100加上j乘以10加上k,并换行
                
            }
 
        }
    }
    return 0; // 返回0,表示程序正常结束
}

输出结果:

在这里插入图片描述

3.杨辉三角

杨辉三角的每行行首与每行结尾的数都为1.而且,每个数等于其左上及其正上二数的和。
代码如下:

#include <iostream>
using namespace std;

int main() {
    int a[15][15] = {{0}}; // 定义一个15行15列的二维数组,初始化为0
    int i, j;
    for (i = 0; i < 15; i++) {
        a[i][0] = 1; // 每行第一个元素为1
        for (j = 1; j <= i; j++) {
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; // 其他元素为上一行相邻两个元素之和
        }
    }
    for (i = 0; i < 15; i++) {
        for (j = 0; j <= i; j++) {
            cout << a[i][j] << "    "; // 输出每个元素,占8个字符宽度
        }
        cout << endl; // 每行输出完毕后换行
    }
    return 0;
}

输出结果:

在这里插入图片描述

4.猴子吃桃

一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住多吃了一个。第二天又吃了一半,再加上一个;后面每天都是这样吃.到第10天的时候,小猴子发现只有一个桃子了。
问小猴子第一天共摘了多少个桃子?
用递归函数求得小猴子第一天共摘了多少个桃子。

代码如下:

#include <iostream>
using namespace std;

int tao(int n); // 函数声明

int main() {
    cout << tao(10) << endl; // 输出数列的第10项
    return 0;
}

int tao(int n) {
    if (n == 1) { // 递归结束条件
        return 1;
    }
    return (tao(n - 1) + 1) * 2; // 递归调用,计算数列的第n项
}

函数tao是一个递归函数,它的参数是数列的项数n,返回值是数列的第n项。在函数内部,我们首先判断递归结束的条件,即当n等于1时,返回1。否则,我们递归调用tao(n - 1)来计算数列的第n-1项,然后加1并乘以2,得到数列的第n项。

输出结果:

在这里插入图片描述

5.编写一个持续刷新的时钟

代码如下:

#include <iostream>
#include<unistd.h>
using namespace std;

int main() {
    int year, month, day, hour, min, sec;
    cin >> year >> month >> day >> hour >> min >> sec; // 读入年月日时分秒

    while (1) {
        sleep(1); // 程序暂停1秒

        if (sec < 59) { // 秒数小于59,秒数加1
            sec++;
        } else if (min < 59) { // 秒数等于59,分钟数小于59,分钟数加1,秒数归零
            min++;
            sec = 0;
        } else if (hour < 23) { // 秒数等于59,分钟数等于59,小时数小于23,小时数加1,分钟数和秒数归零
            hour++;
            min = 0;
            sec = 0;
        } else if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day < 31) { // 秒数等于59,分钟数等于59,小时数等于23,月份为31天的月份,日期小于31,日期加1,小时数、分钟数和秒数归零
            day++;
            hour = 0;
            min = 0;
            sec = 0;
        } else if (month == 2 && day < 28) { // 秒数等于59,分钟数等于59,小时数等于23,月份为2月,日期小于28,日期加1,小时数、分钟数和秒数归零
            day++;
            hour = 0;
            min = 0;
            sec = 0;
        } else if ((month == 4 || month == 6 || month == 9 || month == 11) && day < 30) { // 秒数等于59,分钟数等于59,小时数等于23,月份为30天的月份,日期小于30,日期加1,小时数、分钟数和秒数归零
            day++;
            hour = 0;
            min = 0;
            sec = 0;
        } else if (month < 12) { // 秒数等于59,分钟数等于59,小时数等于23,日期为当月最后一天,月份小于12,月份加1,日期变为1号,小时数、分钟数和秒数归零
            month++;
            day = 1;
            hour = 0;
            min = 0;
            sec = 0;
        } else { // 秒数等于59,分钟数等于59,小时数等于23,日期为当月最后一天,月份等于12,年份加1,月份变为1月,日期变为1号,小时数、分钟数和秒数归零
            year++;
            month = 1;
            day = 1;
            hour = 0;
            min = 0;
            sec = 0;
        }

        // 输出当前时间,\r表示不换行,而是回到行首
        printf("%02d:%02d:%02d:%02d:%02d:%02d\r", year, month, day, hour, min, sec);
        fflush(stdout); // 刷新输出缓冲区
    }

    return 0;
}

输出结果:

在这里插入图片描述
输出当前的时间之后,代码就不断运行并持续刷新。。。

6.字符串中某个字符出现的次数

写一个函数有两个参数,第一个参数是个字符,第二个参数是个char *,
函数功能为返回这个字符串中该字符的个数。

代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>

// 统计字符串中指定字符的个数
int func(char a, char *b) {
    int i = 0;
    while (*b) {
        if (a == *b) {
            i++;
        }
        b++;
    }
    return i;
}

int main() {
    char c;
    char s[30] = ""; // 初始化为全 0,等价于初始化为空字符串
    std::cout << "请输入一个字符:" << std::endl;
    std::cin >> c;
    std::cin.ignore(); // 忽略输入缓冲区中的换行符
    std::cout << "请输入一个字符串:" << std::endl;
    std::cin.getline(s, 30); // 使用 getline 函数读取一行字符串
    int count = func(c, s);
    std::cout << "字符 " << c << " 在字符串中出现了 " << count << " 次。" << std::endl;
    return 0;
}

输出结果:

在这里插入图片描述

7.字符串逆序输出

代码如下:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    cout << "Enter a string: ";
    getline(cin, str); // read input string
    cout << "Reverse string: ";
    for (int i = str.length() - 1; i >= 0; i--) {
        cout << str[i]; // print characters in reverse order
    }
    cout << endl;
    return 0;
}

输出结果:

在这里插入图片描述

8.实现冒泡排序

代码如下:

#include <iostream>
using namespace std;

int main() {
    int arr[10];
    for (int i = 0; i < 10; i++) {
        cin >> arr[i]; // 输入数组元素
    }

    // 冒泡排序
    for (int i = 0; i < 9; i++) { // 外层循环控制排序轮数
        for (int j = 0; j < 9 - i; j++) { // 内层循环控制每轮比较次数
            if (arr[j] > arr[j + 1]) { // 如果前一个元素大于后一个元素,交换它们的位置
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    cout << "排序后的数组为:";
    for (int i = 0; i < 10; i++) {
        cout << arr[i] << " "; // 输出排序后的数组
    }
    cout << endl;

    return 0;
}

输出结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vite4+vue3:从0到1搭建vben后台管理系统

从0到1带你学习如何搭建vben后台管理系统系列文章目录 一.准备工作:技术选型基础环境的搭建 文章目录 从0到1带你学习如何搭建vben后台管理系统系列文章目录一.准备工作:技术选型基础环境的搭建 前言一、技术选型二、生成基础项目三、安装步骤跑起项目 总结 前言 前端日趋复杂…

鸿蒙Hi3861学习二-程序烧录与日志输出

一、准备事项 开发板&#xff1a;BearPi-Hm Nano windows工具&#xff1a;HiBurn.exe https://pan.baidu.com/s/18OQD1_BvjNKD_J2e2iX3qg?pwdadrs 提取码&#xff1a;adrs windows工具&#xff1a;MobaXterm和RaiDrive 把ubuntu文件夹映射到windows本地。可以参考如下链接&am…

边缘计算在哪些场景的应用?实现了哪些功能

边缘计算是一种分布式计算模型&#xff0c;将数据处理和存储功能从云中心移动到接近数据源的边缘设备上&#xff0c;从而在处理延迟、网络带宽、隐私保护和数据安全等方面带来了许多优势。 智慧油站应用&#xff1a;在加油区部署的吸烟检测、打电话检测、烟火检测、区域入侵检测…

Mybatis-Flex快速入门教程

目录 一、Mybatis-Flex是什么&#xff1f; 二、Mybatis-Flex的有什么特点&#xff1f; 三、Mybatis-Flex和同类框架对比 四、Mybatis-Flex支持的数据库类型 五、快速入门 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;创建数据库 &#xff08;3&#…

攀高识别预警系统 yolov7

攀高识别预警系统通过yolov7网络模型技术&#xff0c;攀高识别预警系统对人员违规抽烟、打架斗殴、异常倒地、翻越围墙、异常聚集、打电话、区域侵入等行为分析等立即抓拍及时触发告警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队希望它能够同时支持…

【5. ROS机器人的运动控制】

【ROS机器人的运动控制】 1. 前言2. 机器人的运动3. 机器人的运动速度单位4. geometry_msgs模型5. 用C实现机器人运动控制5.1 新建vel_pkg包5.2 编写vel_node.cpp代码5.3 设置编译规则5.4 运行验证 6. 用python实现机器人运动控制6.1 新建vel_pkg包6.2 编写vel_node.py代码6.3 …

[开源工具]Win10/11/8/7 获取笔记本电脑连接过的WIFI名称和密码[开箱可用]

[开源工具]Win10/11/8/7 获取笔记本电脑连接过的WIFI名称和密码[开箱可用] 1.打开命令提示符(管理员身份)2.输入netsh wlan show profile3.输入netsh wlan export profile folderC:\ keyclear4.打开C盘5.使用记事本打开 查看WIFI名称和密码 1.打开命令提示符(管理员身份) 首先…

计算机网络-应用协议与数据包分析实验(使用Wireshark)

实验一.应用协议与数据包分析实验(使用Wireshark) 一.实验目的 通过本实验&#xff0c;熟练掌握Wireshark的操作和使用&#xff0c;学习对HTTP协议进行分析。 二.实验内容 学习http协议&#xff0c;使用Wireshark截获http报文&#xff0c;对http请求报文和响应报文进行分析。…

【ONE·C++ || 多态】

总言 主要介绍多态相关内容。 文章目录 总言1、多态介绍1.1、多态是什么1.2、构成多态的两个必备条件1.2.1、虚函数介绍1.2.2、基类的指针或者引用调用虚函数1.2.3、演示多态条件的破坏&#xff08;两个特例说明&#xff09;1.2.3.1、不符合条件演示1.2.3.2、特例演示 1.3、一…

【高危】Spring Boot在Cloud Foundry中部署存在路由限制绕过风险(CVE-2023-20873)

漏洞描述 Spring Boot是用于构建Java应用程序的框架&#xff0c;Cloud Foundry是用于部署和管理应用程序的云平台&#xff0c;/cloudfoundryapplication也会路由至Spring Boot actuator。 当 Spring Boot 的受影响版本部署在 Cloud Foundry 上且具有处理 /cloudfoundryapplic…

计算机网络-应用层和传输层协议分析实验(PacketTracer)

实验三.应用层和传输层协议分析实验 一.实验目的 通过本实验&#xff0c;熟悉PacketTracer的使用&#xff0c;学习在PacketTracer中仿真分析应用层和传输层协议&#xff0c;进一步加深对协议工作过程的理解。 二.实验内容 从 PC 使用 URL 捕获 Web 请求&#xff0c;运行模拟并…

第06讲:为何各大开源框架专宠 SPI 技术?

在此前的内容中&#xff0c;已经详细介绍了 SkyWalking Agent 用到的多种基础技术&#xff0c;例如&#xff0c;Byte Buddy、Java Agent 以及 OpenTracing 中的核心概念。本课时将深入介绍 SkyWalking Agent 以及 OAP 中都会使用到的 SPI 技术。 JDK SPI 机制 SPI&#xff08…

Oracle-12c版本之后替换OCR磁盘组步骤

背景: 用户有一套Oracle12.2的RAC集群&#xff0c;在安装配置的时候&#xff0c;OCR磁盘只使用了单块磁盘external的模式&#xff0c;想替换成包含三块磁盘组成员normal模式的磁盘组 OCR磁盘组存储的对象: 在替换OCR磁盘之前&#xff0c;我们先确认需要迁移的OCR磁盘组存储的对…

图扑数字孪生助力智慧冷链园区实现大数据实时监控

前言 近年来&#xff0c;业界学者及企业就智慧冷链物流展开深入研究&#xff0c;2010 年 IBM 发布的《智慧的未来供应链》研究报告中提出智慧供应链概念&#xff0c;并由此延伸出智慧物流概念&#xff0c;即智慧物流是以信息化为依托并广泛应用物联网、人工智能、大数据、云计…

设置rocky Linux ip 与主机服务器处于同一网段内,并且能上网

第一步&#xff1a;查找主机服务器的 了解地址信息 第二步&#xff0c;设置rocky Linux 网络适配器连接&#xff0c;选择桥接模式 第三步&#xff1a;设置rocky Linux ip 第四步&#xff0c;设置完&#xff0c;重启Linux &#xff0c;验证ip是否修改过来&#xff0c;是否在同一…

【python】scikit-learn包:模型评估与优化

模型构建的目的 首先明确&#xff0c;模型拟合的目的&#xff1a; 不是对训练数据进行准确预测&#xff0c;而是对新数据进行准确预测 欠拟合 与 过拟合 欠拟合&#xff1a;可以通过训练数据及时发现&#xff0c;且可通过优化模型结果解决 过拟合&#xff1a;难以发觉&#x…

Golang基础----基于Goland编辑器快速体验Golang

【原文链接】Golang基础----基于Goland编辑器快速体验Golang &#xff08;1&#xff09;打开Goland&#xff0c;点击“New Project” &#xff08;2&#xff09;设置项目存放位置以及项目名&#xff0c;然后点击“Add SDK”&#xff0c;然后点击“Local” &#xff08;3&a…

vue3 的router跳转 - 页面同tab跳转和打开新tab跳转

vue3 的router跳转 - 页面同tab跳转和打开新tab跳转 vue3的路由基本知识 当前页需要的方法 主要是获得Vue Router实例暴露的一些方法&#xff0c;使用这些方法&#xff0c;进行路由操作引入 import { useRouter } from vue-router;调用 const router useRouter();目标页需…

Android jetpack Compose之约束布局

概述 我们都知道ConstraintLayout在构建嵌套层级复杂的视图界面时可以有效降低视图树的高度&#xff0c;使视图树扁平化&#xff0c;约束布局在测量布局耗时上比传统的相对布局具有更好的性能&#xff0c;并且约束布局可以根据百分比自适应各种尺寸的终端设备。因为约束布局确…

simulink simscape传感总结

1. 传感模块概述2. 可观测的传感量3. 传感模块3.1 运动传感模块3.1.1 旋转和平移细分旋转平移 3.2 力传感模块3.2.1 关节力和力矩细分 1. 传感模块概述 Simscape提供传感模块&#xff0c;通过改变模型的输入和输出&#xff0c;可以进行许多分析&#xff0c;比如可以进行机械臂…