关于#c++#的问题:)输入格式一个整数(位数 <= 20)输出格式重新排列后最小的新数样例输入382样例输出238

关于#c++#的问题:)输入格式一个整数(位数 <= 20)输出格式重新排列后最小的新数样例输入382样例输出238

问题描述:

现在有一个20位以内的自然数,你可以将组成这个数的各位数字重新排列,得到一个数值为最小的新数,但新数的位数保持不变。请编程打印出重新排列后的新数。(如:231重新排序后位数不变的最小数是123,而23105重新排序后位数不变的最小数是10235。)
输入格式
一个整数(位数 <= 20)
输出格式
重新排列后最小的新数
样例输入
382
样例输出
238


#include <iostream>
#include <string>
using namespace std;

// 统计字符串中各种数字出现的次数
void statistics(string number, int* frequency)
{
    for (int i = 0; i < 10; ++i)
        frequency[i] = 0;
    for (int i = 0; i < number.length(); ++i)
    {
        ++frequency[(int)(number[i] - '0')];
    }
}

int main()
{
    string number;
    string min;
    cin >> number;
    int frequency[10];
    statistics(number, frequency);
    for(int i=1;i<10;++i)
        if (frequency[i] != 0)
        {
            min += ('0' + i);
            --frequency[i];
            break;
        }
    for (int i = 0; i < 10; ++i)
    {
        while (frequency[i] != 0)
        {
            min += ('0' + i);
            --frequency[i];
        }
    }
    cout << min;
    return 0;
}