相信你是最棒哒!!!
文章目录
题目描述
正确代码
法一注释版
简洁版
法二注释版
简洁版
题目描述
任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。
输入描述
自然数 n
输出描述
各位数字组成的最大数
样例输入
1593
样例输出
9531
正确代码
法一注释版
#include<stdio.h>
int main () {
int n,i,j,q,a[50]; // 声明变量n用于存储输入的数字,i、j、q用于循环,a[50]是一个数组,用于存储数字的每一位
scanf("%d",&n); // 读取n
for(i=0;; i++) { // 一个无限循环,用于分解数字n的每一位
a[i]=n%10; // 取n的最后一位数字,即n除以10的余数,存储在数组a的第i个位置
n=n/10; // 将n除以10,去掉最后一位数字
if (n==0) // 如果n变为0,说明数字已经被完全分解
break; // 跳出循环
}
int t; // 声明一个临时变量t,用于交换数字
for(j=1; j<i; j++) { // 外层循环,控制排序的轮数,从1开始,因为第0位不需要排序
for(q=0; q<=i-j; q++) { // 内层循环,用于比较并交换相邻的数字
if(a[q]<a[q+1]) { // 如果当前位置的数字小于下一个位置的数字
t=a[q]; // 交换两个数字
a[q]=a[q+1];
a[q+1]=t;
}
}
}
for(q=0; q<=i; q++) // 循环输出排序后的数字
printf("%d",a[q]); // 打印数组a中的每个元素
} // 主函数的结束
简洁版
#include<stdio.h>
int main () {
int n,i,j,q,a[50];
scanf("%d",&n);
for(i=0;;i++) {
a[i]=n%10;
n=n/10;
if (n==0)
break;
}
int t;
for(j=1; j<i; j++) {
for(q=0; q<=i-j; q++) {
if(a[q]<a[q+1]) {
t=a[q];
a[q]=a[q+1];
a[q+1]=t;
}
}
}
for(q=0;q<=i;q++)
printf("%d",a[q]);
}
法二注释版
#include <stdio.h> // 包含标准输入输出库,用于scanf和printf函数
#include <stdlib.h> // 包含标准库,提供qsort函数
#include <string.h> // 包含字符串处理库,提供strlen函数
// 比较函数,用于qsort比较两个元素的大小
int compare(const void *a, const void *b) {
return *(char *)b - *(char *)a; // 如果b指向的字符大于a指向的字符,则返回正数;如果小于,则返回负数;如果相等,则返回0
}
int main() {
char a[50]; // 声明一个字符数组
scanf("%s", &a); // 读取一个字符串a
int l = strlen(a); // 使用strlen函数计算字符串a的长度,并存储在变量l中
qsort(a, l, sizeof(char), compare); // 使用qsort函数对字符串a进行排序
// a是要排序的数组的首地址
// l是要排序的元素个数
// sizeof(char)指定每个元素的大小,这里是1,因为a是字符数组
// compare是自定义的比较函数,用于告诉qsort如何比较两个元素
printf("%s\n", a); // 打印排序后的字符串
return 0; // 程序正常结束
}
简洁版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *a, const void *b) {
return *(char *)b - *(char *)a;
}
int main()
{
char a[50];
scanf("%s",&a);
int l=strlen(a);
qsort(a, l, sizeof(char), compare);
printf("%s\n", a);
return 0;
}
总结
这段代码的主要功能是读取用户输入的一个字符串,然后使用 qsort
函数对这个字符串中的字符进行升序排序,并输出排序后的结果。qsort
是一个通用的排序函数,它可以对任何类型的数组进行排序,只要提供了正确的比较函数。在这个例子中,比较函数 compare
被设计为按照字符的ASCII值进行比较,从而实现字符的升序排序。