<>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 *,
函数功能为返回这个字符串中该字符的个数。
<>代码如下:
<>代码解读:
这段代码定义了一个函数 func,用于统计字符串中指定字符的个数。在 main 函数中,首先读取一个字符和一个字符串,然后调用 func
函数统计指定字符在字符串中出现的次数,并输出结果。其中,使用 cin.ignore() 函数忽略输入缓冲区中的换行符,使用 cin.getline()
函数读取一行字符串,最多读取 29 个字符。
#include <cstdio> #include <iostream> #include <cstring> // 统计字符串中指定字符的个数 int
func(char a, char *b) { int i = 0; while (*b) { // 当指针 b 指向的字符不为 '\0' 时,继续循环 if
(a == *b) { // 如果指定字符与当前字符相等 i++; // 计数器加 1 } b++; // 指针 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 函数读取一行字符串,最多读取 29 个字符 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); // 读取用户输入的字符串
cout<< "Reverse string: "; for (int i = str.length() - 1; i >= 0; i--) { cout <<
str[i]; // 逆序输出字符串中的字符 } cout << endl; return 0; }
<>输出结果:
<>数组逆序输出:
<>代码如下:
#include <iostream> #include <vector> int main() { std::vector<int> a = {1,2,3,
4,5,6}; // 定义一个vector a,里面存放了1到6这6个整数 int n = a.size(); // 获取a的长度 int *p = &a[0]
; // 定义一个指向a的第一个元素的指针p int *q = &a[n-1]; // 定义一个指向a的最后一个元素的指针q while(p < q) {
// 当p小于q时,执行以下操作 int temp = *p; // 定义一个临时变量temp,存放p指向的元素的值 *p = *q; //
将p指向的元素的值赋值为q指向的元素的值 *q = temp; // 将q指向的元素的值赋值为temp p++; // p指针向后移动一位 q--; //
q指针向前移动一位 } for(int i = 0; i < n; i++) { // 遍历a中的元素 std::cout << a[i] << " ";
// 输出a中的元素 } std::cout << std::endl; // 输出一个换行符 return 0; // 返回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; }
<>输出结果:
<>9.n行数组之和
题目:输入的第一行有一个数字N代表接下来有N行数组,每一行数组有不固定个数的整数(最多20个,每行最大200个字元),请你写一个程序将每行的总和打印出来。
<>代码如下:
<>代码解读:
这段代码是一个读取输入的程序,它首先读取一个整数n,表示接下来有n行输入。然后对于每一行输入,它将这一行字符串转换为stringstream类型的对象ss,然后从ss中读取整数并求和,最后输出这一行的和。
#include <iostream> #include <sstream> using namespace std; int main() {
string s; // 定义一个字符串s,用于存储输入的一行 stringstream ss; //
定义一个stringstream类型的对象ss,用于将字符串转换为整数 int n, i, sum, a; //
定义整数n,i,sum和a,其中n表示输入的行数,i表示当前处理的行数,sum表示当前行的和,a表示从stringstream中读取的整数 cin >> n;
// 读取输入的行数 getline(cin, s); // 读取换行符,用于清空输入缓冲区 for (i = 0; i < n; ++i) //
循环处理每一行输入 { getline(cin, s); // 读取一行输入 ss.clear(); // 清空stringstream对象 ss.str(s)
; // 将字符串s存入stringstream对象 sum = 0; // 将当前行的和初始化为0 while (1) //
循环读取stringstream中的整数 { ss >> a; // 从stringstream中读取一个整数 if (ss.fail()) //
如果读取失败,说明已经读取完了当前行的所有整数 break; // 跳出循环 sum += a; // 将读取的整数加入当前行的和中 } cout << sum
<< endl; // 输出当前行的和 } return 0; // 程序结束 }
<>输出结果:
输入两组数,第一组数1 2 3 4 5之和为15,第二组数7 8 9之和为24:
<>10.整型数组内函数求和
<>代码如下:
#include <stdio.h> // 声明一个函数,用于计算整数数组的和 int array_sum(int *data, int n); int
main(int argc, const char *argv[]) { // 定义一个整数数组 int a[] = {1, 2, 3, 4, 5, 6, 7,
8}; int sum = 0; // 调用 array_sum 函数计算数组的和 sum = array_sum(a, sizeof(a) / sizeof(
int)); // 输出数组的和 printf("sum=%d\n", sum); return 0; } // 实现 array_sum 函数 int
array_sum(int *data, int n) { int ret = 0; int i; // 遍历整数数组,计算数组的和 for (i = 0; i
< n; i++) { ret += data[i]; } return ret; }
<>输出结果:
<>11.计算某字符在字符串中出现的次数
写一个函数有两个参数,第一个参数是char,第二个参数是string
函数功能为返回这个字符串中该字符的个数。
<>代码如下:
#include <iostream> // C++标准库头文件 #include <string> //
C++标准库头文件,用于使用std::string类型 using namespace std; // 使用std命名空间 void func(char a,
string b); // 函数声明 int main(int argc, const char *argv[]) { char c; string s;
// 使用std::string类型 cout << "Please input char:" << endl; cin >> c; cin.ignore();
// 忽略输入流中的换行符 cout << "Please input string:" << endl; getline(cin, s); //
使用std::getline()函数读取一行字符串 func(c, s); return 0; } void func(char a, string b) {
int i = 0; for (char& c : b) { // 使用C++11的范围for循环遍历字符串 if (a == c) { i++; } }
cout<< i << endl; }
<>输出结果:
<>12.删除字符串中的空格
<>代码如下:
#include <iostream> #include <string.h> // 函数:从字符串中删除空格 void del_space(char *s1
); int main(int argc, const char *argv[]) { // 带有空格的输入字符串 char s[]="a d gg sd ";
// 打印原始字符串 std::cout << "原始字符串:" << s << std::endl; // 调用函数删除空格 del_space(s);
// 打印修改后的字符串 std::cout << "修改后的字符串:" << s << std::endl; return 0; } //
函数:从字符串中删除空格 void del_space(char *s1) { // 指针:遍历字符串 char *s2; // 初始化指针为字符串的开头 s2
=s1; // 循环遍历字符串 while(*s1){ if(*s1==' ') { // 如果遇到空格,则跳过 s1++; }else{ //
如果遇到非空格字符,则将其复制到新字符串中 *s2=*s1; s1++; s2++; } } // 在新字符串的末尾添加空字符 *s2='\0'; }
<>输出结果:
<>13.统计字符串中数字字符个数及数字字符之和
<>代码如下:
#include <iostream> #include <string> int main() { std::string s; //
定义一个字符串s,用于存储输入的字符串 int i=0; // 定义一个整型变量i,用于遍历字符串s int j=0; //
定义一个整型变量j,用于记录字符串s中数字字符的个数 int sum=0; // 定义一个整型变量sum,用于记录字符串s中数字字符的和 std::
getline(std::cin, s); // 从标准输入读取字符串s //std::cout << s << std::endl; while(s[i]!=
'\0'){ // 遍历字符串s,直到遇到字符串结束符'\0' if('0'<=s[i]&&s[i]<='9'){ // 判断当前字符是否为数字字符 j++;
// 如果是数字字符,则将j加1 sum+=(s[i]-'0'); // 将当前数字字符转化为整型数值并加到sum中 } i++; //
将i加1,继续遍历下一个字符 } std::cout << "字符串中数字字符的个数为:" << j << std::endl; //
输出字符串s中数字字符的个数 std::cout << "字符串中数字字符求和为:" << sum << std::endl; // 输出字符串s中数字字符的和
return 0; // 返回0,表示程序正常结束 }
<>输出结果:
<>14.二维数组中最大值及其所在的位置
<>代码如下:
#include <iostream> using namespace std; int main() { int a[3][3] = {{1,2,3},{4
,5,6},{7,8,9}}; // 定义一个3x3的二维数组a int i, j, row, column; row = column = 0; //
初始化最大值所在的行和列 for (i = 0; i < 3; i++) { // 遍历二维数组 for (j = 0; j < 3; j++) { if (a
[row][column] < a[i][j]) { // 如果当前元素比最大值还大 row = i; // 更新最大值所在的行 column = j; //
更新最大值所在的列 } } } cout << "max=" << a[row][column] << " 最大值所在行为" << row << "行 " <<
column<< "列" << endl; // 输出最大值及其所在的行和列 return 0; }
<>输出结果:
<>15.简易超市收费系统
<>代码如下:
#include <iostream> using namespace std; int main() { int n; //
定义一个整型变量n,用于存储用户输入的会员类型 double m; // 定义一个双精度浮点型变量m,用于存储用户输入的消费金额 cout <<
"***********************************************\n"; cout <<
"欢迎你来给我送钱,请按以下步骤进行送钱程序\n"; cout << "1、是尊贵会员请输入 1以及消费金额\n"; cout << "2、不是尊贵会员请输入
2以及消费金额\n"; cout << "***********************************************\n"; cin >>
n>> m; // 从标准输入流中读取用户输入的会员类型和消费金额 if(n == 1){ // 如果会员类型为1,即为尊贵会员 if(m < 100){
// 如果消费金额小于100元 cout << "money is " << m * 0.99 << endl; // 打印折扣后的金额 } else if(m
< 200){ // 如果消费金额在100元到200元之间 cout << "money is " << m * 0.95 << endl; //
打印折扣后的金额 } else if(m < 300){ // 如果消费金额在200元到300元之间 cout << "money is " << m *
0.92 << endl; // 打印折扣后的金额 } else if(m < 500){ // 如果消费金额在300元到500元之间 cout <<
"money is " << m * 0.88 << endl; // 打印折扣后的金额 } else { // 如果消费金额大于等于500元 cout <<
"money is " << m * 0.8 << endl; // 打印折扣后的金额 } } else { // 如果会员类型不为1,即为普通会员 if(m
< 100){ // 如果消费金额小于100元 cout << "money is " << m << endl; // 打印原始金额 } else if(m
< 200){ // 如果消费金额在100元到200元之间 cout << "money is " << m * 0.98 << endl; //
打印折扣后的金额 } else if(m < 300){ // 如果消费金额在200元到300元之间 cout << "money is " << m *
0.95 << endl; // 打印折扣后的金额 } else if(m < 500){ // 如果消费金额在300元到500元之间 cout <<
"money is " << m * 0.9 << endl; // 打印折扣后的金额 } else { // 如果消费金额大于等于500元 cout <<
"money is " << m * 0.88 << endl; // 打印折扣后的金额 } } return 0; // 返回0,表示程序正常结束 }
<>输出结果:
<>16.完数
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数。
<>代码如下:
#include <iostream> using namespace std; int main() { int i, j, sum; //
声明变量i、j和sum cout << "1000以内的完数为: "; for (i = 3; i <= 1000; i++) { //
循环遍历3到1000之间的所有数 sum = 1; // 初始化sum为1 for (j = 2; j < i; j++) { //
循环遍历2到i-1之间的所有数 if ((i % j) == 0) { // 如果i能够被j整除 sum += j; // 将j加入到sum中 } } if (
sum== i) { // 如果sum等于i cout << i << " "; // 输出i } } cout << endl; return 0; //
返回0表示程序正常结束 }
<>输出结果:
<>17.选择排序算法:
<>代码如下:
<>代码解读:
选择排序的基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。在这段代码中,首先定义了一个常量N为5,表示待排序的数据元素个数为5。然后定义了一个长度为N的整型数组num,用于存放待排序的数据元素。接着通过循环输入N个数,并将输入的数存入数组num中。接下来是选择排序的核心代码,通过两层循环,每次找到待排序数据元素中最小值的下标,然后将其与当前位置的值进行交换,直到全部待排序的数据元素排完。最后通过循环输出排序后的结果。
根据选择排序的基本思想,每次需要从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。在这段代码中,外层循环需要循环N-1次,内层循环需要循环N-i-1次,因此选择排序的时间复杂度为
O ( n 2 ) O(n^2)O(n2)。
#include <iostream> using namespace std; #define N 5 // 定义常量N为5 int main() {
int i, j, k, temp; // 定义变量i、j、k、temp int num[N]; // 定义长度为N的整型数组num cout << "请输入"
<< N << "个数:" << endl; // 输出提示信息 // 输入 for (i = 0; i < N; i++) { // 循环输入N个数 cin
>> num[i]; // 将输入的数存入数组num中 } // 选择排序 for (i = 0; i < N - 1; i++) { //
外层循环,循环N-1次 k = i; // 将当前位置设为最小值的下标 for (j = i + 1; j < N; j++) { //
内层循环,循环N-i-1次 if (num[j] < num[k]) { // 如果当前位置的值比最小值小 k = j; // 将最小值的下标设为当前位置 }
} if (k != i) { // 如果最小值不是当前位置的值,则交换 temp = num[i]; num[i] = num[k]; num[k] =
temp; } } // 输出 cout << "排序后的结果为:" << endl; // 输出提示信息 for (i = 0; i < N; i++) {
// 循环输出排序后的结果 cout << num[i] << " "; } cout << endl; return 0; // 返回0表示程序正常结束 }
<>输出结果:
<>18.求三角形的面积
<>代码如下:
#include <iostream> // 更改头文件的名称 #include <cmath> // 更改头文件的名称 int main(int argc,
char **argv) { // 更改main函数的返回类型 long double area; // 更改double为long double long
double a, b, c, s, n; // 更改double为long double std::cout << "请输入三角形的三边长" << std::
endl; std::cin >> a >> b >> c; // 更改输入语句 if ((a + b) > c && (a + c) > b && (b +
c) > a) { s = 1.0 / 2 * (a + b + c); area = std::sqrt(s * (s - a) * (s - b) * (s
- c)); // 更改sqrt函数 std::cout << area << std::endl; // 更改输出语句 } else { std::cout
<< "错误" << std::endl; // 更改输出语句 } return 0; }
<>输出结果: