按用户指定自定义顺序排序三个数字的实现需求与代码片段
实现按自定义顺序排序三个数字
要搞定这个需求,核心思路其实很简单:先把输入的三个数字里的最小值(min)、中间值(mid)和最大值(max)找出来,然后根据用户指定的顺序规则(比如ABC、CAB这类),把这三个值按对应顺序输出就可以了。
具体步骤拆解:
- 读取用户输入的三个整数,用数组存储起来
- 通过比较确定三个数里的最小、中间、最大值
- 解析用户指定的顺序字符串,把每个字符映射到对应的数值(比如A对应min,B对应mid,C对应max),最后按顺序输出
完整的C语言实现代码
#include <stdio.h> #include <stdlib.h> int main() { int i, array[3]; // 读取三个输入数字 for(i = 0; i < 3; i++) { scanf("%d", &array[i]); } int max, mid, min; // 初始化三个值为第一个元素 max = array[0]; mid = array[0]; min = array[0]; // 遍历数组找出最大值和最小值 for(i = 1; i < 3; i++) { if(array[i] > max) { max = array[i]; } if(array[i] < min) { min = array[i]; } } // 通过总和减去最大、最小值快速得到中间值 mid = array[0] + array[1] + array[2] - max - min; // 读取用户指定的排序顺序(比如ABC、CAB) char order[4]; scanf("%s", order); // 根据顺序输出对应数值 for(i = 0; i < 3; i++) { switch(order[i]) { case 'A': printf("%d ", min); break; case 'B': printf("%d ", mid); break; case 'C': printf("%d ", max); break; default: printf("无效的顺序字符!"); return 1; } } printf("\n"); return 0; }
代码细节说明:
- 找最大最小值:用一次遍历就能搞定,比嵌套判断更简洁高效
- 计算中间值:利用三个数的总和减去max和min,省去了一堆复杂的条件判断,逻辑更清晰
- 顺序映射:用switch语句匹配顺序字符串里的每个字符,直接对应输出对应数值,扩展性也强——如果以后要加其他顺序规则,直接加case就行
测试示例:
示例1:输入数字
1 5 3,指定顺序ABC
输出结果:1 3 5(对应最小→中间→最大)
示例2:输入数字
1 5 3,指定顺序CAB
输出结果:5 1 3(对应最大→最小→中间)
内容的提问来源于stack exchange,提问作者Yizhi Hu
相关产品推荐
相关产品推荐

