C++基础-编程练习题及答案

文章目录


前言

C++基础-编程练习题和答案


一、查找"支撑数"

【试题描述】

在已知一组整数中, 有这样一种数非常怪, 它们不在第一个, 也不在最后一个, 而且刚好都

比左边和右边相邻的数大, 你能找到它们吗?

【输入要求】

第一行为整数 m, 表示输入的整数个数。 ( 3≤ m ≤100 ) 第二行为 m 个整数。

【输出要求】

若干个支撑数, 每行一个。

【输入样例】

14

1 3 2 4 1 5 3 9 7 10 8 23 85 43

【输出样例】

3

4

5

9

10

85

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
/*
在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗?
*/
int main() { 
	//定义变量m
	int m;  
	cin >> m; // 输入整数的个数  
	
	if (m < 3 || m > 100) {  
		cout << "输入的整数个数不符合要求!" << endl;  
		return 1;  
	}  
	//定义m个元素的数组
	int nums[m];  
	for (int i = 0; i < m; ++i) {  
		cin >> nums[i]; // 输入整数  
	}  
   // 遍历整数数组,跳过第一个和最后一个元素
	for (int i = 1; i < m - 1; ++i) {   
		if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) {  
			// 如果当前数比左右两边的数都大,则是支撑数  
			cout << nums[i]<<endl;  
		}  
	}  
	
	return 0;  
}

二、数组元素的查找

【试题描述】

给你 m 个整数, 查找其中有无值为 x 的数, 输出 x 一共有几个.

【输入要求】

第一行一个整数 m: 数的个数 ( 0 ≤ m ≤ 100 )

第二行 m 个整数(空格隔开) ( 这些数在 0-999999 范围内 )

第三行为要查找的数 x

【输出要求】

一个整数, 表示 x 的个数。

【输入样例】

7

10 21 3 3 5 3 7

3

【输出样例】

3

代码如下:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;  
/**
 * 给你 m 个整数, 查找其中有无值为 x 的数, 输出 x 一共有几个.
 * @return 
 */
int main() {  
	int m;  
	cin >> m; // 读取整数个数  
	
	// 创建一个大小为m的整数数组
	int nums[m];
	for (int i = 0; i < m; ++i) {  
		cin >> nums[i]; // 读取每个整数  
	}  
	
	int x;  
	cin >> x; // 读取要查找的数x  
	
	int count = 0; // 初始化计数器  
	// 遍历整数数组 
	for(int i=0;i<m;i++){		
		if (nums[i] == x) { // 如果找到与x相等的数  
			++count; // 计数器加1  
		}  
	}  
	
	cout << count << endl; // 输出x的个数  
	
	return 0;  
}

三、爬楼梯

【试题描述】

有一段楼梯有 n 级台阶,规定每一步只能跨一级或两级,要登上第 m 级台阶有几种不同的走法?

(n<=1000, m<n)

【输入要求】

一行, 两个正整数 n 和 m。

【输出要求】

一个整数

【输入样例】

10 4

【输出样例】

5

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;  
/*
有一段楼梯有 n 级台阶,规定每一步只能跨一级或两级,要登上第 m 级台阶有几种不同的走法?
*/

int main() {  
	int n, m;  
	cin >> n >> m;  
	
	// 这里n是楼梯的总级数,但根据题目要求,我们只需要计算到达第m级台阶的方法数  
	
	if (m <= 2) {  
		return m;  
	}  
	//定义m级台阶走法数组
	int dp[m];
	//一级台阶1种走法
	dp[0] = 1;  
	//二级台阶2种走法
	dp[1] = 2;  
	//第i级台阶走法=第i-1级台阶走法+第i-2级台阶走法
	for (int i = 2; i < m; ++i) {  
		dp[i] = dp[i - 1] + dp[i - 2];  
	}  
	//第 m 级台阶的走法数
	cout << dp[m - 1] << endl;  
	
	return 0;  
}

四、数字交换

【试题描述】

有一组数(设有 N 个) 。 有 M 组操作,每组操作交换给定的两个数.编一程序输出经过 M 次

交换后的数组。

【输入要求】

第一行, 两个数 N, M(不超过 20 个)

第二行 N 个数, 由空格分开

从第三行开始连续有 M 行, 每行 2 个数字(即 M 组数) 。

以其中一行数字举例: 比如 3 5 表示第三个数和第五个数交换。

【输出要求】

交换后的一行数(中间用空格隔开)

【输入样例】

16 2

3 6 11 45 23 70 67 34 26 89 90 15 56 50 20 10

3 5

13 15

【输出样例】

3 6 23 45 11 70 67 34 26 89 90 15 20 50 56 10

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;  
/**
  有一组数(设有 N 个),有 M 组操作,每组操作交换给定的两个数.编一程序输出经过 M 次交换后的数组。
 */
int main() {  
	int n, m;  
	cin >> n >> m; // 读取数组长度和操作次数  
	//定义数组
	int nums[n];  
	for (int i = 0; i < n; i++) {  
		cin >> nums[i]; // 读取初始数组  
	}  

	// 执行交换操作  
	for (int i = 1; i <= m; ++i) {  
		int index1, index2;  
		cin >> index1 >> index2; // 读取需要交换的两个数的索引  
		index1=index1-1;
		// 注意:C++中的数组索引是从0开始的,所以要将输入的索引减1  
		// tmp用于交换的中间变量 交换两个数  
		int tmp=nums[index1];
		nums[index1]=nums[index2 - 1];
		nums[index2 - 1]=tmp;
	}  
	
	// 输出交换后的数组  
	for (int i = 0; i < n; ++i) {  
		cout << nums[i] << " ";  
	}  
	
	return 0;  
}

五、找高于平均分的人

【试题描述】

全班 n 个同学的成绩需要按学号读入, 请找出所有高于班级的平均同学。

【输入要求】

两行, 第一行为一个正整数 n, 第二行为 n 个实数, 每个实数之间用一个空格分隔。

【输出要求】

一行, 输出高于班平均的同学的学号, 场宽为 10。

【输入样例】

5

92 97.5 93 87 89

输出样例

1 2 3

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;  
/**
  全班 n 个同学的成绩需要按学号读入, 请找出所有高于班级的平均同学。
 */
int main() {  
	int n;  
	cin >> n; // 读取学生数量  
	
	double scores[n];
	//循环读取n个学生数量
	for (int i = 0; i < n; ++i) {  
		cin >> scores[i]; // 读取第i个学生成绩  
	}  
	
	double sum = 0.0;  
	for (int i = 0; i < n; ++i) {  
		// 计算成绩总和  
		sum += scores[i]; 
	}  
	// 计算平均成绩  
	double average = sum / n; 
	//cout<<"平均分"<<average<<endl;
	
	for (int i = 0; i < n; ++i) {  
		if (scores[i] > average) {  
			// 输出高于平均分的同学学号,学号是从1开始的
			cout << setw(10) << (i + 1) << " ";   
		}  
	}  
	cout << endl; // 输出结束后换行  
	
	return 0;  
}
相关推荐
sewinger14 分钟前
区间合并算法详解
算法
CSP1263617 分钟前
特别节目————集训总结
c++
XY.散人17 分钟前
初识算法 · 滑动窗口(1)
算法
程序猿阿伟19 分钟前
《C++游戏人工智能开发:开启智能游戏新纪元》
c++·人工智能·游戏
韬. .38 分钟前
树和二叉树知识点大全及相关题目练习【数据结构】
数据结构·学习·算法
Word码43 分钟前
数据结构:栈和队列
c语言·开发语言·数据结构·经验分享·笔记·算法
五花肉村长1 小时前
数据结构-队列
c语言·开发语言·数据结构·算法·visualstudio·编辑器
一线青少年编程教师1 小时前
线性表三——队列queue
数据结构·c++·算法
C1 小时前
C++_智能指针详解
开发语言·c++
Neituijunsir1 小时前
2024.09.22 校招 实习 内推 面经
大数据·人工智能·算法·面试·自动驾驶·汽车·求职招聘