习题"/>
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习题
发布评论