ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PTA习题

2022-02-22 13:33:06  阅读:139  来源: 互联网

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

标签:std,10,cnt,输出,int,PTA,++,习题
来源: https://blog.csdn.net/qq_61674725/article/details/123065816

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有