PTA习题

编程入门 行业动态 更新时间:2024-10-19 12:37:27

PTA<a href=https://www.elefans.com/category/jswz/34/1769768.html style=习题"/>

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--;}elsei++;flag = false;}return length;
}

主要就是设计了一个clear函数,接受地址和长度,帮助删除重复的数据,可以更换形参的指针类型应用到其他题目中


发现利用STL这类题挺方便的。。。

#include<iostream>
#include<vector>
#include<algorithm>
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;}std::vector<int> p(cnt);for (int i = 0; i < cnt; i++){p[i] = n % 10;n /= 10;}std::sort(p.begin(), p.end());std::vector<int>::iterator pos = std::unique(p.begin(), p.end());p.erase(pos, p.end());std::reverse(p.begin(), p.end());for (int i = 0; i < p.size(); i++)std::cout << p[i];return 0;
}

更多推荐

PTA习题

本文发布于:2024-02-24 16:40:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1695978.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:习题   PTA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!