| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 722 人关注过本帖, 1 人收藏
标题:还是排列!
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏(1)
已结贴  问题点数:100 回复次数:16 
还是排列!
大家知道1 到 n的排列 有n!个
我这个要求不高 只要朋友们将 这n!个排列的前200个按字典顺序显示出来即可 不能出现重复和缺少的想象。
限制是 1 =< n <= 16.
比如 输入 n = 3 结果显示
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
记住一个排列占一行 如果能在每个排列前给个序号更好。

搞个百分贴 俺留的可用分忒多了点。
搜索更多相关主题的帖子: 朋友 
2012-06-01 18:36
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:25 
程序代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;

bool permutation(vector<int> &num) 
{
    int len = num.size() - 1;
    int top, tail,i;
    for(i=len; i>0; --i ) {
        if( num[i] > num[i-1]) {
            top = i;
            break;
        }
    }
    if(i == 0) return false;

    tail = top;
    for( i = len; i >=0; --i) {
        if(num[top-1] < num[i]) {
            tail = i;
            break;
        }
    }
    int tmp =num[top-1];
    num[top-1] = num[tail];
    num[tail] = tmp;

    for(int i=top, j = len; i<j; ++i, --j) {
        int tmp = num[i];
        num[i] = num[j];
        num[j] = tmp;
    }
    return true;
}
int main()
{
    int n;
    cin >> n;
    long long f[20]={0,1,2};
    for(int i=3; i<20; ++i) {
        f[i] = f[i-1] * i;
    }

    vector<int> num;
    num.reserve(n+1);
    for(int i=1; i<=n; ++i) {
        num.push_back(i);
    }
    copy(num.begin(), num.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    int cas = 0;
    while(cas < 200 && (long long)cas < f[n]) {
        permutation(num);
        cout << cas++ << ": ";
        copy(num.begin(), num.end(), ostream_iterator<int>(cout, " "));
        cout << endl;
    }
    return 0;
}


看行不

[ 本帖最后由 草狼 于 2012-6-1 19:36 编辑 ]
2012-06-01 19:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这任务是给新人玩的吧,支持

不必给我分

重剑无锋,大巧不工
2012-06-01 19:48
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 草狼
呵呵 很好 而且给代码速度快
我这个比较基础 坛子里的朋友应该都可以露一手的吧。

梅尚程荀
马谭杨奚







                                                       
2012-06-01 19:53
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 beyondyf
杨大哥说对了 面向大众的 。

梅尚程荀
马谭杨奚







                                                       
2012-06-01 19:54
heifeng2012
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:53
专家分:113
注 册:2012-3-22
收藏
得分:0 
有难度
2012-06-01 21:00
ab1034982749
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:215
专家分:1185
注 册:2012-4-14
收藏
得分:0 
围观一下下
2012-06-01 23:30
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
可以尝试,可能会需要点时间,(找个理由让自己动起来!)
2012-06-02 22:04
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
给点分罢
2012-06-03 11:33
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <iostream>
using namespace std;

inline 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);
}

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

int main()
{
    int array[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }, n, i;
    cin >> n;
    do {
        cout << array[0];
        for (i = 1; i < n; ++i)
            cout << " " << array[i];
        cout << endl;
    } while (NextPermutation(array, array + n));
}

My life is brilliant
2012-06-03 12:09
快速回复:还是排列!
数据加载中...
 
   



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

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