标题:c++近似排序的问题求代码
只看楼主
shasacat
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-8-29
结帖率:100%
已结贴  问题点数:20 回复次数:3 
c++近似排序的问题求代码
近似排序
试题描述
读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30.

输入要求
1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100.

输出要求
输出排序后的数据,每行输出一个数。

输入样例
22 39

输出样例
30
31
22
32
23
33
24
34
25
35
26
36
27
37
28
38
29

关于这道题目,我的思考是:
1.输入x-y的数值,存在数组a中;
2.将数组中的每个数倒过来存放;
3.排序;
4.再将排完序的每个数倒过来输出;
到最后一步,卡壳了,如果数中有30,第一次倒过来是3,第二次再倒还是3啊,不会变30了,这该如何解决呢?
如果我的思路有错,也请指正!
搜索更多相关主题的帖子: 近似 排序 个数 输出 输入 
2018-08-29 21:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
你保留原先的副本就是了
我奇怪的是,1、10、100这三个数怎么比较?
2018-08-29 23:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
在网上查了一下,有句
If two numbers reverse to the same number (e.g., 3 and 30), the smaller unreversed one should appear first in the output.
这样题目才完整正常。

然后再看“输出样例”,22到39,且说明“包括这两个数本身”,难道不应该是输出18个数字嘛,看你给出的“输出样例”才17个。

这种稀里糊涂不严谨的题目,如果是老师强制要求的,随便应付一下就是了
程序代码:
#include <algorithm>
#include <utility>
#include <cstdio>
using namespace std;

inline unsigned decimal_reverse( unsigned n )
{
    unsigned r = 0;
    for( ; n!=0; n/=10 )
        r = r*10 + n%10;
    return r;
}

int main( void )
{
    unsigned a, b;
    scanf( "%u%u", &a, &b );

    pair<unsigned,unsigned> buf[101]; // “两个数之差不超过100”是指最多101个数么?
    const size_t len = b-a+1;
    for( size_t i=0; i!=len; ++i )
    {
        buf[i].first = (unsigned)(a+i);
        buf[i].second = decimal_reverse( buf[i].first );
    }

    sort( buf, buf+len, [](const auto& lhs, const auto& rhs){return lhs.second==rhs.second ? lhs.first<rhs.first : lhs.second<rhs.second;} );

    for_each( buf, buf+len, [](const auto& vp){printf("%u\n",vp.first);} );
}

2018-08-30 09:53
shasacat
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-8-29
得分:0 
回复 3楼 rjsp
谢谢你的回复。这道题目是一本书上的,输出确实有18个,是我打漏了,抱歉。但书中翻译的文字没有你提及的那一句英文。再次感谢你为我答疑解惑。
2018-08-30 12:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489509-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028076 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved