| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3350 人关注过本帖, 2 人收藏
标题:一个烦人的算法题。。。高手请进!!!
只看楼主 加入收藏
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:1 
哎,你们写的,我一点都不懂

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-06-01 13:57
erudate
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2012-6-1
收藏
得分:1 
不太懂
2012-06-01 14:37
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:1 
程序代码:
#include <stdio.h>

void Swap(int* p1, int* p2)
{
    int tmp = *p1; *p1 = *p2; *p2 = tmp;
}

void Reverse(int* start, int* end)
{
    while (start < end)
        Swap(start++, --end);
}

void NextPermutation(int* start, int* end)
{
    int* p, *sp = end - 2;
    if (start >= end - 1)
        return;
    if (sp[0] < sp[1]) {
        Swap(sp, sp + 1);
        return;
    }
    while (sp >= start) {
        if (sp[0] < sp[1])
            break;
        --sp;
    }
    if (sp < start)
        Reverse(start, end);
    else {
        for (p = end - 1; p > sp; --p)
            if (*p > *sp) {
                Swap(sp, p);
                break;
            }
        Reverse(sp + 1, end);
    }
}

int main()
{
    int m, n, k, i, array[1024];
    scanf("%d", &m);
    while (m--) {
        scanf("%d%d", &n, &k);
        for (i = 0; i < n; ++i)
            scanf("%d", array + i);
        while (k--)
            NextPermutation(array, array + n);
        printf("%d", array[0]);
        for (i = 1; i < n; ++i)
            printf(" %d", array[i]);
        putchar('\n');
    }
}
这个自己测试过没问题,但是提交就Runtime error。找不到那里有问题,而且也查不到出错信息。

[ 本帖最后由 lz1091914999 于 2012-6-2 12:13 编辑 ]
收到的鲜花
  • beyondyf2012-06-01 19:50 送鲜花  45朵   附言:有思路就行,一样送分

My life is brilliant
2012-06-01 15:07
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 53楼 lz1091914999
你的问题应该出在这里     Swap(sp, &sp[sp[1] - sp[0]]);
如果是 6 3 5 4 1 7 2 或者 2 5 4 3 1 6 按照你的来就出界了 .

梅尚程荀
马谭杨奚







                                                       
2012-06-01 17:21
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 46楼 饭桶
500ms,很正常。都是这个数量级的。我想是因为它的数据量大的缘故吧,单求一组输入不会用这么多的时间。关于OJ的时间统计方式我一直表示不满。

重剑无锋,大巧不工
2012-06-01 20:04
liupeng5843
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:31
专家分:32
注 册:2012-6-1
收藏
得分:1 
等我想一下,看自己可以不,没有编不出来的程序,只有想不出的算法
2012-06-01 21:32
liupeng5843
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:31
专家分:32
注 册:2012-6-1
收藏
得分:0 
有想法
2012-06-01 22:18
never_yzq
Rank: 4
等 级:业余侠客
帖 子:112
专家分:213
注 册:2012-5-25
收藏
得分:1 
不是很懂!
2012-06-01 22:42
Ayiis
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1086
专家分:3063
注 册:2011-4-10
收藏
得分:1 
回复 13楼 beyondyf
看了这么多人的代码,还是杨大的代码比较。。。有深度

  • 该单位
  • 正在被拖走
2012-06-02 09:08
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
回复 48楼 有容就大
继续加油!

人得一生得奋斗!
2012-06-02 09:30
快速回复:一个烦人的算法题。。。高手请进!!!
数据加载中...
 
   



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

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