刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

序列排序
对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。
时间限制:1000
内存限制:65536
输入
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。
输出
输出按照题目要求排序后的序列
样例输入

6
17 26 9 13 88 10 

样例输出

88 9 26 17 13 10

使用微信搜索喵呜刷题,轻松应对考试!

答案:

include<bits/stdc++.h>

using namespace std;

struct num{

int a;

int g;

}s[100];

bool cmp(num a,num b){

if(a.g<b.g)

return a.g;

if(a.g>b.g)

return b.g;

if(a.a>b.a)

return b.a;

return a.a;

}

int main()

{

int n;

cin>>n;

for(int i=1;i<=n;i++){

cin>>s[i].a;

s[i].g=s[i].a%10;

}

sort(s+1,s+1+n,cmp);

for(int i=1;i<=n;i++){

cout<<s[i].a<<" ";

}

return 0;

解析:

【喵呜刷题小喵解析】:本题要求我们对一个正整数序列进行排序,排序的规则是:先按照每个数的各位数之和从大到小排序,如果各位数之和相同,则按照数字本身的大小排序,大的在前,小的在后。我们可以使用一个结构体来存储每个数字和其各位数之和。然后在比较函数中,我们先比较各位数之和,如果相同,再比较数字本身。最后使用`sort`函数对序列进行排序。在这个程序中,`s`数组用于存储输入的数字和它们的各位数之和,`cmp`函数用于比较两个数字的大小,`main`函数用于读取输入并进行排序和输出。但是,程序中有几个错误:1. `if(a.gb.g)`应该返回`false`,而不是`b.g`。3. `if(a.a>b.a)`应该返回`false`,而不是`b.a`。正确的比较函数应该是这样的:```cppbool cmp(num a,num b){if(a.g>b.g)return true;if(a.gb.a)return false;return true;}```此外,数组下标从1开始是不符合C++编程习惯的,应该从0开始。所以,在读取输入和排序时,应该将下标从1改为0。最后,输出时应该使用`cout<
创作类型:
原创

本文链接:序列排序 对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share