7-6 数字排序 (10 分)
给出一个十进制正整数 n,按从大到小的顺序输出其中包含的数字。重复出现的数字,仅输出一次。
输入格式:
输入在一行中给出一个正整数 n,且保证其大小不超出整型的表示范围。
输出格式:
在一行中按从大到小的顺序输出 n 中包含的数字。重复的数字,仅输出一次。
输入样例1:
100
输出样例1:
10
输入样例2:
271828
输出样例2:
8721
#include<iostream>
#include<algorithm>
int clear(int*, int);
int main(void)
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int n, cnt = 0, tmp = 0;
std::cin >> n;
tmp = n;
while (tmp)
{
cnt++;
tmp /= 10;
}
int* p = new int[cnt];
for (int i = 0; i < cnt; i++)
{
p[i] = n % 10;
n /= 10;
}
int t = clear(p, cnt);
for (int i = 0; i < t - 1; i++)
for (int j = 0; j < t - 1 - i; j++)
if (p[j] < p[j + 1])
std::swap(p[j], p[j + 1]);
for (int i = 0; i < t; i++)
std::cout << p[i];
delete[] p;
p = nullptr;
return 0;
}
int clear(int* arr, int length)
{
int i, j, k;
bool flag = false;
for (i = 0; i < length; )
{
for (j = 0; j < length; j++)
{
if (arr[i] == arr[j] && (i != j))
flag = true;//布尔值为真,说明有相同数据,进入下面if执行数据删除
}
if (flag)
{
for (k = i; k < length-1; k++)
arr[k] = arr[k + 1];//整体数据左移
length--;
}
else
i++;
flag = false;
}
return length;
}
主要就是设计了一个clear函数,接受地址和长度,帮助删除重复的数据,可以更换形参的指针类型应用到其他题目中