C++基础-编程练习题1

发布于:2024-05-08 ⋅ 阅读:(25) ⋅ 点赞:(0)


一、哥德巴赫猜想

【试题描述】
哥德巴赫提出了以下的猜想:任何一个大于 2 的偶数都可以表示成 2 个质数之和。 质数是指除了 1 和本身之外没有其他约数的数, 如 2 和 11 都是质数,而 6 不是质数,因为 6 除了约数 1 和 6 之外还有约数 2 和 3。 需要特别说明的是 1 不是质数。
请你编一个程序验证哥德巴赫猜想
【输入要求】
n 的值
【输出要求】
多组由两个素数之和组成的表达式, 每组第一个数字要从小到大排列
【输入样例】
14
【输出样例】
3+11
7+7

#include <bits/stdc++.h>
using namespace std;  

// 函数用于检查一个数是否为质数  
bool isPrime(int n) {  
	//小于等于1的数不是质数
	if (n <= 1) return false;  
	//2是质数
	if (n == 2) return true;  
	//除2外能被2整除的数不是质数
	if (n % 2 == 0) return false;  
	
	for (int i = 3; i < n; i += 1) {
		//能被小于自身的数整除,说明不是质数
		if (n % i == 0) return false;  
	}  
	
	return true;  
}  

// 函数用于验证哥德巴赫猜想  
void goldbachConjecture(int n) {  
	if (n <= 2 || n % 2 != 0) {  
		cout << "输入错误,请输入大于 2 的偶数." << endl;  
		return;  
	}  
	//从2开始循环找到满足条件的两个质数
	for (int i = 2; i <= n / 2; ++i) {
		//第一个质数
		if (isPrime(i)) {  
			//第二个质数
			int second = n - i;  
			if (isPrime(second)) {  
				//质数之和,并输出结果  
				cout << i << "+" << second << endl;  
			}
		}  
	}  

}  

int main() {  
	//定义变量n,存放输入的大于2的偶数
	int n;  
	//输入大于 2 的偶数
	cin >> n;  
	//调用goldbachConjecture函数
	goldbachConjecture(n);  
	return 0;  
}

二、哥德巴赫猜想2

【试题描述】
求出哥德巴赫猜想的所有解(将一个大于 9 的奇数拆分成三个素数之和),并按从小到大的顺序写出。
【输入要求】
一行, 一个大于 9 的奇数。
【输出要求】
每行一个解。
【输入样例】
15
【输出样例】
15=2+2+11
15=3+5+7
15=5+5+5

#include <bits/stdc++.h>
using namespace std; 
// 判断是否为素数的函数  
bool isPrime(int num) {  
	if (num <= 1) return false;  
	if (num == 2) return true;  
	if (num % 2 == 0) return false;  
	
	for (int i = 3; i < num; i += 1) {  
		if (num % i == 0) return false;  
	}  
	
	return true;  
}

/**
  * 求解哥德巴赫猜想  
  * /
void goldbachConjecture(int oddNum) {  
	//取oddNum前三分之一段的数,因2是质数故从2开始
	for (int i = 2; i <= oddNum / 3; ++i) {  
		//i第一个质数
		//取剩下的前半段数
		for (int j = i; j <= (oddNum - i) / 2; ++j) {  
			//j第二个质数
			//求第三个质数k
			int k = oddNum - i - j;  
			//三个数均为素数时,满足要求
			if (isPrime(i) && isPrime(j) && isPrime(k)) {  
				//按题目要求输出
				cout << oddNum << "=" << i << "+" << j << "+" << k << endl;  
			}  
		}  
	}  
}  

int main() {  
	int oddNum;  
	//输入大于9的奇数
	cin >> oddNum;  
	if (oddNum <= 9 || oddNum % 2 == 0) {  
		cout << "输入错误,请输入一个大于9的奇数." << endl;  
		return 1;  
	}  
	goldbachConjecture(oddNum);  
	return 0;  
}

三、打印成绩单

【试题描述】
输入 N 个同学的语文成绩, 算出总分, 打印出成绩单
【输入要求】
N 个同学的成绩
【输出要求】
N 个同学的成绩及总分。
【输入样例】
5
98 78 98 65 90
【输出样例】
total:429
98
78
98
65
90

#include <bits/stdc++.h>
using namespace std;  
/**
  输入 N 个同学的语文成绩, 算出总分, 打印出成绩单
 */
int main() {  
	int n;  
	cin >> n; // 读取同学的数量  
	
	int scores[n]; // 创建一个存储成绩的数组  
	int total = 0; // 用于计算总分的变量  
	
	// 读取每个同学的成绩  
	for (int i = 0; i < n; ++i) {  
		cin >> scores[i];  
		//将每个成绩相加,得到总分
		total = total+ scores[i]; 
	}  
	// 打印总分  
	cout << "total:" << total << endl;  
	// 打印每个同学的成绩  
	for (int i = 0; i < n; ++i) { 
		cout << scores[i] << endl;  
	}  
	return 0;  
}

四、成绩输入输出

【试题描述】
全班 n 个同学的成绩需要按学号读入计算机并输出, 请编程实现。
【输入要求】
两行, 第一行为一个正整数 n, 第二行为 n 个实数。
【输出要求】
n 行, 包括所有同学的成绩, 每行包括学号和成绩, 之间用一个“: ” 分隔, 成绩保留一
位小数。
【输入样例】
5
92 97.5 93 87 89
【输出样例】
1: 92.0
2: 97.5
3: 93.0
4: 87.0
5: 89.0

#include <bits/stdc++.h>  
using namespace std;  
/**
  全班 n 个同学的成绩需要按学号读入计算机并输出
 * @return 
 */
int main() {  
	int n;  
	cin >> n; // 读取学生数量  
	
	double scores[n]; // 创建包含n个元素的double类型数组用于存储成绩  
	for (int i = 0; i < n; ++i) {  
		cin >> scores[i]; // 读取每个学生的成绩  
	}  
	
	// 遍历数组并输出每个学生的学号和成绩  
	for (int i = 0; i < n; ++i) {  
		//fixed确保了使用固定小数点格式,而setprecision(1)则设置了小数点后要显示的位数
		cout << (i + 1) << ": " << fixed << setprecision(1) << scores[i] << endl;  
	}  
	
	return 0;  
}

五、数组输出奇数位偶数位

【试题描述】
对输入的数据分两行输出, 第一行为输入顺序的奇数位置数据, 第二行为输入顺序的偶数位置数据。
【输入要求】
共两行。
第一行为整数 n。
第二行为 n 个整数。
【输出要求】
两行。
第一行为奇数位置的数。
第二行为偶数位置的数。
注意: 每个元素右边都有一个空格。
【输入样例】
9
1 5 4 7 8 5 6 9 3
【输出样例】
1 4 8 6 3
5 7 5 9

#include <bits/stdc++.h>  
using namespace std;  
/**
* 对输入的数据分两行输出, 第一行为输入顺序的奇数位置数据, 第二行为输入顺序的偶数位置数据。
**/
int main() {  
	int n;  
	cin >> n; // 读取整数n  
	
	int nums[n]; // 创建一个大小为n的数组来存储整数  
	for (int i = 0; i < n; ++i) {  
		cin >> nums[i]; // 读取整数并存入数组
	}  
	
	// 输出奇数位置的数  
	for (int i = 0; i < n; i =i+ 2) {  
		cout << nums[i];  
		if ((i + 2) < n) {  
			cout << " "; // 如果不是最后一个数,则输出一个空格  
		}  
	}  
	cout << endl; // 换行  
	
	// 输出偶数位置的数  
	for (int i = 1; i < n; i += 2) {  
		cout << nums[i];  
		if (i + 2 < n) {  
			cout << " "; // 如果不是最后一个数,则输出一个空格  
		}  
	}  
	cout << endl; // 换行  
	
	return 0;  
}