| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 445 人关注过本帖
标题:一个被sort与qsort折磨泪流满面的人。。。
只看楼主 加入收藏
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:6 
一个被sort与qsort折磨泪流满面的人。。。
有一个问题是这样问的:给出一个100位以内的数字,在仅允许相邻位互换(0位除外)的情况下,使该数字变得最大,如1012400189,交换后得出1042100981
我的师兄用C++写了一个,我用C语言写了一个,感觉两份似乎并没有差别,可是我的就是不对,师兄的试了很多次,都是对的。。。废话不多说,上代码,求指教~~
师兄的C++版本(对的)
#include <iostream>  
#include <algorithm>  
#include <string>  
#include <vector>  
  
using namespace std;  
  
bool cmp(char str1, char str2)  
{  
    return str1 > str2;  
}  
  
int main()  
{  
    int caseNum;  
    int caseCount = 0;  
  
    string number;  
  
    cin >> caseNum;  
  
    while (caseCount < caseNum)  
    {  
        cin >> number;  
  
        for (int i = 0; i < number.length(); i++)  
        {  
            if (number[i] != '0')  
            {  
                int startSortIndex = i;  
                int sortIndexCount;  
                while (true)  
                {  
                    if (i > number.length() - 1 || number[i] == '0')  
                        break;  
                    else  
                    {  
                        i++;  
                    }  
                }  
                sort(number.begin() + startSortIndex, number.begin() + i, cmp);  
            }  
        }  
  
        cout << number << endl;  
  
        caseCount++;  
    }  
}

我的C语言版本(错的)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int cmp(const void*a,const void*b)
{
    return ((int)*(char *)b-(int)*(char *)a);
}
int main()
{
    char ch[200];
    int n;
    int num;
    int i;
    int beg;

    scanf("%d%*c",&n);

    while(n--)
    {
        gets(ch);

        num=strlen(ch);

        for(i=0;i<num;i++)
        {
            if(ch[i]!='0')
            {
                beg=i;
                 while(1)
                {
                    if(i>num-1||ch[i]=='0')
                        break;
                    else
                        i++;
                }
                qsort(ch+beg,i-beg,sizeof(ch[0]),cmp);
            }
        }

        printf("%s\n",ch);
    }
    return 0;
}  
想了两天都没有想出来。。。
搜索更多相关主题的帖子: include return C语言 
2012-02-12 21:56
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
收藏
得分:5 
把算法思路理清了就好做了   124 变成421 最大    189变成981最大  数字间有零就分成几段数字  数字按降序排列

算法,数据结构,windows核心编程.
2012-02-14 23:37
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
是你自己折磨自己了,那里错了?你怎么试的?
我拿你的程序试过,就能得到正确答案。
图片附件: 游客没有浏览图片的权限,请 登录注册

梅尚程荀
马谭杨奚







                                                       
2012-02-15 08:20
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
收藏
得分:5 
楼主 : 弱弱问下 根据题意 为啥 1012400189,交换后得出1042100981  而可能是 9842111000
2012-02-15 08:29
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:5 
回复 4楼 C_596322153
因为题目的意思是遇“0”不换

我的地盘
2012-02-15 09:53
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 2楼 爱德华
我也是这么想的,可是结果好像就不太给力了
2012-02-16 20:30
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 3楼 有容就大
这是一个在我们学校online judge上的题,网址是这个 soj.me/1783 估计是有我的程序一些例子过不了,你试一下吧~
2012-02-16 20:34
快速回复:一个被sort与qsort折磨泪流满面的人。。。
数据加载中...
 
   



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

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