💪蓝蓝计算机考研算法-day09求5个数的最值和ASCII码排序

272 阅读3分钟

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的大小升序排列的

运行实例

image.png

思路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;
}
  • 时间复杂度 O(n)O(n)--- 遍历数组比较元素大小,其中n为数组长度
  • 空间复杂度 O(1)O(1)---数组为必要空间,除此仅有常熟级的变量

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;
}
  • 时间复杂度 O(1)O(1)---除去输入数据所占用的时间,剩下仅为常数级
  • 空间复杂度 O(1)O(1)---仅有常熟级的变量,除此无额外的辅助空间

总结

  • 今天的两道题难度适中,对于大多数同学来说都是比较友好地,主要还是解决大家对于一些容易想到解题思路,但对于代码实现生疏的这一现状!!!