[蓝蓝计算机考研算法训练二期]-day09

137 阅读2分钟

13、5个数求最值

设计一个从5个整数中取最小数和最大数的程序

  • 输入 输入只有一组测试数据,为五个不大于1万的正整数
  • 输出 输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。

思路

采用了“抽取”的思想,先默认第一个数最小值和最大值,然后依次遍历,分别对比往后的每个数字,最大值用max记录,最小值用min记录。

具体实现

#include <stdio.h>

int main() {
    int a[5], max, min;
    scanf("%d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4]);

    max = a[0];
    min = a[0];
    for(int i=1; i<5; i++) {
        if(a[i] > max) {
            max = a[i];
        }
        if(a[i] < min) {
            min = a[i];
        }
    }

    printf("%d %d\n", min, max);
    return 0;
}

image.png

14 、ASCII码排序

输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。

  • 输入 第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。
  • 输出 对于每组输入数据,输出一行,字符中间用一个空格分开。

思路

输入n之后进行循环,每次循环进行判断,对读取字符进行排序(ACSII码的大小)。

具体实现

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    while (n--) {
        char a, b, c;
        scanf(" %c %c %c", &a, &b, &c);
        if (a > b) {
            char tmp = a;
            a = b;
            b = tmp;
        }
        if (a > c) {
            char tmp = a;
            a = c;
            c = tmp;
        }
        if (b > c) {
            char tmp = b;
            b = c;
            c = tmp;
        }
        printf("%c %c %c\n", a, b, c);
    }
    return 0;
}

image.png

小结

这两次算法都有排序的内容在其中,可以看做是两种思想,如果是只求最大值、最小值,可以用第一种思路,如果是要按序排列,则用第二种思想。