写在前面:
题解是对具体题目的编程实现,不会具体讲解C语言语法。请先大致学习好语法,自己敲敲代码后再看题解(上来就直接看题解的习惯不好哟~)。在每一题的题解之前,会列出本题涉及到的语法知识供参考,可以在教材或其他学习资源找到这些内容学习。😀
本题的预备知识:
- 变量的定义与赋值操作
- 输入(scanf)输出(printf)语句
- 排序算法:冒泡排序法 / 选择排序法 / 插入排序法
求各位数字组成的最大数
成绩 | 10 | 开启时间 | 2020年03月28日 星期六 08:00 |
折扣 | 0.8 | 折扣时间 | 2020年04月20日 星期一 23:00 |
允许迟交 | 否 | 关闭时间 | 2020年04月30日 星期四 23:00 |
任意输入一个自然数(不大于99999999),输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。
输入: 自然数 n
输出: 各位数字组成的最大数
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 40120↵ | 42100↵ | 1秒 | 64M | 0 |
题解
本题其实就是一个排序问题,将输入的数字按照降序排列输出即可...这里我们用字符串读入数字,其实数组中每一位储存的是数字的ascii码,不过ascii码表中数字与其对应的ascii码保持同样的顺序,故可以放心比较。
一些简单的排序算法可以看看这些文章:
(排序算法还是很重要的,刚接触会比较难完全写对,多看看写写就好了...)
完整代码:
下面是用选择排序法实现的 ——
#include <stdio.h> //导入stdio.h库,里面包含输入输出函数
#include <string.h> //导入string.h库,里面包含strlen(求字符串长度)函数
int main() {
char a[9];
scanf("%s", a);
int len = strlen(a); //求出字符串的长度(即元素的个数)
/* 进行选择排序 */
for (int i = 1; i <= len; i++) {
char temp = a[i];
int index = i;
while (index > 0 && a[index - 1] < temp) {
a[index] = a[index - 1];
index--;
}
a[index] = temp;
}
printf("%s\n", a);
}
有任何问题欢迎评论交流,如果本文对您有帮助不妨点点赞,嘻嘻~
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~