PTA习题

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函数,接受地址和长度,帮助删除重复的数据,可以更换形参的指针类型应用到其他题目中

上一篇:POJ9273:PKU2506Tiling_递推+高精度


下一篇:MySQL增删改、导入导出数据,where条件查询