| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4870 人关注过本帖
标题:编程序写出1到9的全排列
只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用边小白在2015-6-18 06:58:51的发言:

切,不就是写个循环么,再判断数据中是否含0,好歹我已经学了一个多月了,容我再想几天,肯定做的到。

别折腾了,你不适合学编程

我就是真命天子,顺我者生,逆我者死!
2015-06-18 07:02
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
我很期待大神写个惊艳的代码,我确实不会写,所以才从网上抄
2015-06-18 07:13
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用我爱吃青菜在2015-6-18 07:13:09的发言:

我很期待大神写个惊艳的代码,我确实不会写,所以才从网上抄

网上有很多人解题思路特别反人类,

我就是真命天子,顺我者生,逆我者死!
2015-06-18 07:30
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用边小白在2015-6-18 07:33:24的发言:

好像错了,应该是从12-98循环,在单个数据中一个数只出现一次,所以既要剔除0,也要剔除重复。

这是高中的内容,没兴趣听你扯淡

我就是真命天子,顺我者生,逆我者死!
2015-06-18 07:38
lowrie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:81
专家分:138
注 册:2015-3-12
收藏
得分:0 
回复 18楼 边小白
这就是我现在的想法,但感觉做法不是很好,所有数字都判断一遍会花费很多的额外步骤比较耗时,我想实现一个步数比较少的办法,就是算法优化。
2015-06-18 08:58
lowrie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:81
专家分:138
注 册:2015-3-12
收藏
得分:0 
想到一个办法,用链表实现,每个节点有9个孩子,是1-9,根节点是1到9,9颗树,然后1-9,1的孩子是2-8,以此类推,这个方法大概要比较9的10次方这么多次,大家有什么其他的好办法吗?
2015-06-18 09:48
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:35 
回复 14楼 我爱吃青菜
程序代码:
#define NUM 9
#define MAX_DEPTH 9

int mark[NUM+1] = {0};
int printList[NUM+1] = {0};

void dfs(int depth)
{
    for (int i = 1; i <= NUM; i++)
    {
        if (!mark[i])
        {
            mark[i] = 1;
            printList[depth] = i;
            
            if (depth < MAX_DEPTH)
            {
                dfs(depth+1);
            }
            else
            {
                for (int j = 1; j <= MAX_DEPTH; j++)
                { 
                    printf("%d ", printList[j]);
                }
                
                printf("\n");
            }
            
            mark[i] = 0; 
        } 
    }
}

int main(void)
{
    dfs(1);
    return 0;
}


[ 本帖最后由 BlueGuy 于 2015-6-18 10:31 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2015-06-18 10:23
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
其实,我真不想搭理你们这些懒人

程序代码:
1 2 3 4 
1 2 4 3 
1 3 2 4 
1 3 4 2 
1 4 2 3 
1 4 3 2 
2 1 3 4 
2 1 4 3 
2 3 1 4 
2 3 4 1 
2 4 1 3 
2 4 3 1 
3 1 2 4 
3 1 4 2 
3 2 1 4 
3 2 4 1 
3 4 1 2 
3 4 2 1 
4 1 2 3 
4 1 3 2 
4 2 1 3 
4 2 3 1 
4 3 1 2 
4 3 2 1 

我就是真命天子,顺我者生,逆我者死!
2015-06-18 10:41
lowrie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:81
专家分:138
注 册:2015-3-12
收藏
得分:0 
回复 23楼 BlueGuy
mark[i] = 1;楼主能告诉我这句话是怎么做作用的吗?我知道他是去除有重复数字的数。
但我没明白他的逻辑
2015-06-18 14:44
lowrie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:81
专家分:138
注 册:2015-3-12
收藏
得分:0 
懂了,mark[i] = 1表示这个数i已经出现过了,不用再出现了
2015-06-18 14:50
快速回复:编程序写出1到9的全排列
数据加载中...
 
   



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

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