深圳大学计软《面向对象的程序设计》实验01 基础练习

A. 超重青蛙(已含答案)

题目描述

在青蛙王国,每个青蛙有着不同的体重。

给出一组青蛙的体重,计算里面超出平均体重的青蛙数量。

输入

第一行输入参数T,表示有T个测试实例

第二行输入参数n,表示这一组青蛙的数量,第三行输入n个青蛙的体重

以此类推

输出

输出每一组青蛙中,超出平均体重的青蛙数量。

输入样例1

2
3
1 2 3
4
10 20 30 40

输出样例1

1
2

提示

深圳大学计软《面向对象的程序设计》实验01 基础练习_第1张图片
深圳大学计软《面向对象的程序设计》实验01 基础练习_第2张图片

AC代码

#include
using namespace std;
#include
int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		int sum = 0, cnt = 0, num;
		cin >> num;
		vector<int>v(num);
		for (int i = 0; i < num; i++)
		{
			cin >> v[i];
			sum += v[i];
		}
		double ave = 1.0 * sum / num;
		for (int i = 0; i < num; i++) 
		{
			if (v[i] > ave)
				cnt++;
		}
		cout << cnt << endl;
	}
	return 0;
}

B. 箱子匹配

题目描述

每个箱子都有长宽高,我们需要判断一个箱子能否放入另一个箱子中。

例如有箱子A的尺寸是 3 x 4 x 5,箱子B的尺寸 是 5 x 6 x 4,经过比较判断,可以知道箱子A能够放入箱子B中,我们就说箱子A匹配箱子B。

注意,当两个箱子尺寸相等,我们也认为它们匹配。

输入

第一行输入参数T,表示有T个测试实例

第二行输入第1组实例的箱子A的长、宽、高,输入数值为小于1000的自然数

第三行输入第1组实例的箱子B的长、宽、高,输入数值为小于1000的自然数

以此类推

输出

如果两个箱子匹配,输出yes,否则输出no。逐行输出每一组的箱子匹配结果。

输入样例1

3
3 4 5
5 6 4
5 6 4
3 4 5
5 6 7
7 4 7

输出样例1

yes
yes
no

AC代码

#include
using namespace std;
#include


int main(){
	int t;
	cin >> t;
	while (t--){
		int a[3], b[3];
		for (int i = 0; i < 3; i++) {
			cin >> a[i];
		}
		for (int i = 0; i < 3; i++) {
			cin >> b[i];
		}
		sort(a, a + 3);
		sort(b, b + 3);

		bool flag1 = 0, flag2 = 0;
		for (int i = 0; i < 3; i++) {
			if (a[i] < b[i])
				flag1 = 1;
			else if (a[i] > b[i])
				flag2 = 1;
		}
		if (!flag1 || !flag2)
			cout << "yes" << endl;
		else
			cout << "no" << endl;

	}
	return 0;
}

C. 六六大顺

题目描述

小六最喜欢的数字,当然是6了。当然,他也喜欢一切6的倍数,或者数位长度是6的倍数,或者末尾数字带6的数字。当给你一个数字,你能否告诉我,这是否是小六的幸运数呢?

输入

输入数据的第一行为测试数据的个数t(1 <= t <= 100),接下来有t行。每一行是一个数字n(1 <= n <= 10000000)

输出

对于每一组测试数据,如果是小六的幸运数字则输出“Yes”,否则输出“No”。每一组数据输出一行。

输入样例1

4
655665
222
6666656
6666665

输出样例1

Yes
Yes
Yes
No

AC代码

#include
using namespace std;

int main() {
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		string s = to_string(n);
		if (n % 6 == 0 || s.length() % 6 == 0 || *s.rbegin() == '6')
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}

D. 矩阵左转

题目描述

输入一个N*M的矩阵,要求将这个矩阵向左旋转90度后输出

比如现在有矩阵 :

1 2 3

4 5 6

向左旋转90度后的矩阵变为:

3 6

2 5

1 4

输入

第一行输入T表示有T个测试实例

第二行输入矩阵维度N和M,表示N行和M列

第三行起输入矩阵数据,矩阵数据用自然数表示

下面依次类推

输出

输出左转90度的矩阵

注意每行最后一个数据不带空格,直接换行

输入样例1

2
2 3
1 2 3
4 5 6
3 3
1 2 3
4 5 6
7 8 9

输出样例1

3 6
2 5
1 4
3 6 9
2 5 8
1 4 7

AC代码

#include
using namespace std;

int main() {

	int t;
	cin >> t;
	while (t--) {
		int n, m;
		cin >> n >> m;
		vector<vector<int>>arr(n);
		for (int i = 0; i < n; i++) {
			arr[i].resize(m);
			for (int j = 0; j < m; j++) {
				cin >> arr[i][j];
			}
		}

		for (int i = m - 1; i >= 0; i--) {
			for (int j = 0; j < n; j++) {
				if (j)cout << " ";
				cout << arr[j][i];
			}
			cout << endl;
		}
	}
	return 0;
}

E. 古典加密

有一种古典加密方法就是按照字母表顺序,把每个字母循环右移k位,从而转换为加密的另一个字母。

例如偏移2位,即A对应C,B对应D,……X对应Z,Y对应A,Z对应B;同样a对于c,b对应d,……x对应z,y对应a,z对应b。

当前设定加密规则是:循环右移4位,对于输入的字符,只对字母进行加密,字母区分大小写,其他字符例如数字、标点符号等不做加密,直接输出。

输入

第一行输入T表示有T个测试实例

第二行输入一个字符串,字符串可以包含字母、数字、标点符号等

以此类推输入下一个数据

输出

输出加密后的字符串

输入样例1

2
SZU1983
1949,china

输出样例1

WDY1983
1949,glmre

AC代码

#include
using namespace std;

void transfer(char& ch) {
	if (isalpha(ch))
		for (int i = 0; i < 4; i++) {
			if (ch == 'Z')
				ch = 'A';
			else if (ch == 'z')
				ch = 'a';
			else
				ch++;
		}
}


int main() {

	int t;
	cin >> t;
	while (t--) {
		string s;
		cin >> s;
		for (auto& ch : s) {
			transfer(ch);
		}
		cout << s << endl;
	}
	return 0;
}

F. 求组合数(函数)

题目描述

编写一个函数,m和n是参数,按以下公式求组合数的值,假设m,n都是正整数,且m>n。

在这里插入图片描述

主函数负责输入m和n的值,并调用函数求出组合数的值,并输出

输入

测试数据的组数 t

第一组m,n

第二组m,n

输出

第一组组合数的值

第二组组合数的值

输入样例1

3
8 5
6 3
10 8

输出样例1

56
20
45

AC代码

#include
using namespace std;
#include

int factorial(int n) {
	if (n == 0)
		return 1;
	int ans = 1;
	for (int i = 2; i <= n; i++) {
		ans *= i;
	}
	return ans;
}

int combinatorial_number(int m, int n) {
	return factorial(m) / factorial(n) / factorial(m - n);
}


int main(){
	int t;
	cin >> t;
	while (t--){
		int m, n;
		cin >> m >> n;
		cout << combinatorial_number(m, n) << endl;
	}
}

G. 数制转换(函数)

题目描述

编写函数long change(char s[]),其作用是将参数表示的十六进制数转换为相应的十进制整数

输入

测试数据的个数

第一个十六进制数

第二个十六进制数

输出

第一个十进制数

第二个十进制数

输入样例1

3
1234
F8
AB12

输出样例1

4660
248
43794

AC代码

#include
using namespace std;
#include

int factorial(int n) {
	if (n == 0)
		return 1;
	int ans = 1;
	for (int i = 2; i <= n; i++) {
		ans *= i;
	}
	return ans;
}

int combinatorial_number(int m, int n) {
	return factorial(m) / factorial(n) / factorial(m - n);
}


int main(){
	int t;
	cin >> t;
	while (t--){
		int m, n;
		cin >> m >> n;
		cout << combinatorial_number(m, n) << endl;
	}
}

你可能感兴趣的:(C++程序设计,深圳大学,算法,c++,数据结构)