先看题:写代码将一个三位数按从大到小输出。
例如:输入123
输出:3 2 1
这道编程题非常经典,经常用于初学者的练习。很多人会考虑使用数组,但对于初学者而言数组可能还未熟练掌握,下面就介绍一种只通过选择语句来枚举的方法。
题目分析:将这个三位数的个位十位百位进行排序,很显然要将这个数的个位,十位,百位进行抽离。常用取余符号(%)进行,如123%10=3,再用定义整数强制取整的法则依次得到个位,十位,百位。得到了这三位,剩下的就是根据大小排序输出问题。我们可以通过暴力枚举的方法,将情况一一列出来,由排列组合易知,如果将个位、十位、百位重复的情况排除(即像996这种有百位和十位重合的情况),一共有六种情况。相等的情况我们只需要将大于号改成大于等于号即可。(即996这种情况)
这里推荐使用编译器VS2022。这里很明显要用到scanf函数,但是scanf在VS上会报错,提示使用scanf_s,这里并不推荐使用scanf_s,因为它不是C语言提供的,如果你的代码使用了scanf_s函数,那么你的代码只能在vs上编译,其他编译器无法识别,降低了代码的可移植性。解决办法,在代码的第一行加上一串代码:(一定得在第一行)
#define _CRT_SECURE_NO_WARNINGS 1
但是这样每一次使用scanf函数,都要将这一行代码粘贴到最上方,这样会导致非常麻烦,有一个一劳永逸的做法,是的每次创建源文件时都会有函上面这条语句,这样每次创建的源文件都可以使用scanf 函数。步骤:先下载everything软件。
然后找到newc++file.cpp这个文件,右键找到打开路径,找到文件的地址,选中文件后右键使用更多打开方式,通过用《记事本》打开,然后再添加上面那串代码,此后创建的源文件都会包含这串代码。如果没有修改权限,可以拷贝到桌面,用《记事本》打开添加代码后,找到原来文件(newc++file.cpp)所在的位置,再拷贝回去,代替原来的文件。这样以来,以后创建的源文件都会包含这一串代码。
只要有了这串代码,我们就可以使用scanf函数了,并且编译器不会报错。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 0,b,c,d ;
scanf("%d", &a);
if (100 <= a <= 999)
{
b = a % 10;//个位
c = (a / 10) % 10;//十位
d = (a / 100);//百位
if (b >= c && c>= d)
printf("%d %d %d", b, c, d);
else if (b >= d && d >= c)
printf("%d %d %d", b, d, c);
else if (d >= b && b >= c)
printf("%d %d %d", d, b, c);
else if (d >= c && c>= b)
printf("%d %d %d", d, c, b);
else if (c >= b && b >= d)
printf("%d %d %d", c, b, d);
else if (c >= d && d>= b)
printf("%d %d %d", c, d, b);
}
return 0;
}
注:连续关系符号三个以上的话,如a>b>c在C语言一般无法识别,所以一般采用逻辑字符&&来表示。