Day09 2023/03/08
难度:简单
题目1
设计一个从5个整数中取最小数和最大数的程序
输入 :
输入只有一组测试数据,为五个不大于1万的正整数
输出 :
输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。
题目2
输入三个字符(可以重复)后,按各字符的ASC码从小到大的顺序输出这三个字符。
输入:
第一行输入一个数N,表示有N组测试数据。后面的行输入多组数据,每组输入数据都是占一行,由三个字符组成,之间无空格。
输出:
对于每组输入数据,输出一行,字符中间用一个空格分开。
示例1
输入:34 56 -87 6 2
输出:最大值为:56 最小值为:-87
示例2
3
rjm
顺序为:j m r
uso
顺序为:o s u
m3f
顺序为:3 f m
说明:一共三组数据都是按照ASCII的大小升序排列的
运行实例
思路1
第一题就是常规的求最大,最小值,我想大家都会的,看看代码注释就可以了!!!
思路2
第二题,求解思路比较简单,用字符串或者字符数组接收每一行的三个字符,按照升序序列排列,最后打印即可。
关键点
-
第二题中,因为对于无序序列的排序方法来说时间复杂度都较高,例如:冒泡排序,选择排序等,但是本题仅要求对3个字符实现升序排列,所以这里使用一种较为原始粗暴的方式,通过比较大小直接交换其位置来实现升序排列,时间复杂度也是降到了常数级(👏😜妙啊!!!)
-
第二题虽然解题方法不复杂,但是对于代码的书写是有细节要求的,其中还是老生常谈,对于使用c++的选手来说,各种输入函数造成的代码运行时的bug还是比较常见的,这里不熟悉的同学可以仔细看这篇:🚀c++最全输入函数cin, cin.get(), cin.getline(), getline()和getchar()的具体用法和详解!
算法实现
c++代码实现-5个数求最值
#include <iostream>
using namespace std;
// 求5个数的最值
int main() {
int a[5] = {0}; // 使用数组存放一组数据
for (int &it : a) cin >> it; // 输入5个数据,每个都不大于10000
int max = a[0], min = a[0]; // 最大最小值,初始为数组第一个元素
for (int it: a) { // 求最大,最小值
if(it > max) max = it;
if(it < min) min = it;
}
cout << "最大值为:" << max << " 最小值为:" << min;
return 0;
}
- 时间复杂度 --- 遍历数组比较元素大小,其中n为数组长度
- 空间复杂度 ---数组为必要空间,除此仅有常熟级的变量
c++代码实现-ASCII码排序
#include <iostream>
#include <string>
using namespace std;
//ASCII码排序
int main() {
int n = 0; // 一共测试n行数据
string str = ""; // 每行由三个字符构成,中间无空格,用字符串存储
char tmp = 0; // 中间变量
cin >> n; // 输入行数n
cin.get(); // 吸收掉回车
while (n-- && getline(cin, str)) { // 输入数据,实现升序排列
if (str[0] > str[1]) tmp = str[0], str[0] = str[1], str[1] = tmp;
if (str[0] > str[2]) tmp = str[0], str[0] = str[2], str[2] = tmp;
if (str[1] > str[2]) tmp = str[1], str[1] = str[2], str[2] = tmp;
cout << "顺序为:" << str[0] << ' ' << str[1] << ' ' << str[2] << endl;
}
return 0;
}
- 时间复杂度 ---除去输入数据所占用的时间,剩下仅为常数级
- 空间复杂度 ---仅有常熟级的变量,除此无额外的辅助空间
总结
- 今天的两道题难度适中,对于大多数同学来说都是比较友好地,主要还是解决大家对于一些容易想到解题思路,但对于代码实现生疏的这一现状!!!