注册 登录
编程论坛 C语言论坛

数字排序:给出一个十进制正整数 n,按从大到小的顺序输出其中包含的数字。重复出现的数字,仅输出一次。 求大佬解答

yggs 发布于 2022-03-05 00:31, 1763 次点击
输入样例1:
100
输出样例1:
10
本人写的:
#include <stdio.h>
#include <string.h>
int main()
{
    int i, j, k, m = 0;
    char a[20], b[20];
    scanf("%s", a);
    if (strlen(a) == 1) printf("%s", a);
    else {
        for (i = 0, k = 0; a < strlen(a); i++) {
            for (j = i + 1; j <= h; j++) {
                if (j == h) break;
                if (a[i] == a[j]) k = 1;
            }
            if (k == 0) a[i] = b[m], m += 1;
        }
        for (i = 0; b[i] != '\0'; i++)
            printf("%c", b[i]);
    }
    return 0;
}

[此贴子已经被作者于2022-3-5 01:55编辑过]

3 回复
#2
海潮浪帆2022-03-05 10:12
马虎的看了一眼,你的h没有定义把
#3
rjsp2022-03-05 19:15
程序代码:
#include <stdio.h>
#include <stdbool.h>

int main( void )
{
    bool buf[10] = { 0 };

    scanf( " " ); // 跳过前面的空白字符
    for( int ch; ch=getchar(), '0'<=ch && ch<='9'; )
        buf[ch-'0'] = true;

    for( int i=9; i>=0; --i )
        if( buf[i] )
            putchar( i+'0' );
}


输入 1231279889
输出 987321
#4
不会游泳的虾2022-03-08 16:08
楼主的代码修改如下,供参考:
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    int i, j, k, m = 0, h;
    char a[20], b[20];
    scanf("%s", a);
    if (strlen(a) == 1) printf("%s", a);
    else {
        for (i = 0, h = strlen(a); i < h; i++) {  //for (i = 0, k = 0; a < strlen(a); i++)
            for (j = i + 1, k = 0; j < h; j++) {  //for (j = i + 1; j <= h; j++)
               
//if (j == h) break;
                if (a[i] == a[j]) {
                    k = 1; break;
                }
            }
            if (k == 0) b[m++] = a[i]; //a[i] = b[m], m += 1;
        }
        for (i = 0; i < m - 1; i++) {  //排序
            for (j = 0; j < m - i - 1; j++) {
                if (b[j] < b[j + 1])
                {
                    k = b[j]; b[j] = b[j + 1]; b[j + 1] = k;
                }
            }
        }
        for (i = 0; i < m; i++) //for (i = 0; b[i] != '\0'; i++)
            printf("%c", b[i]);
    }
    return 0;
}
1