关于#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;
}