| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:[转帖]排列
只看楼主 加入收藏
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
 问题点数:0 回复次数:9 
[转帖]排列

【background】 输入n,(1<=n<=20)要求输出 n^n 个 每个长度为n的所有通过乘法原理所列举出的排列。 比如n为2时 1---1 | X | 2---2 即要求按行输出 11 12 21 22

【sample input】 3 【sample output】 111 112 113 121 122 123 131 132 133 211 212 213 221 222 223 231 232 233 311 312 313 321 322 323 331 332 333

搜索更多相关主题的帖子: 排列 转帖 
2005-01-03 20:41
fjb
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-1-3
收藏
得分:0 
#include<stdio.h> void main() { int i,j,m,p; printf("请输入你要求的数:"); scanf("%d",&p); for(i=1;i<=p;i++) for(j=1;j<=p;j++) for(m=1;m<=p;m++) printf("%d%d%d\n",i,j,m); }
2005-01-03 21:14
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
得分:0 
以下是引用fjb在2005-1-3 21:14:01的发言: #include<stdio.h> void main() { int i,j,m,p; printf("请输入你要求的数:"); scanf("%d",&p); for(i=1;i<=p;i++) for(j=1;j<=p;j++) for(m=1;m<=p;m++) printf("%d%d%d\n",i,j,m); }
程序只适用于n等于3一种情况,不符合题目要求。

2005-01-04 00:08
ylinccax
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2005-1-4
收藏
得分:0 
再来一个循环语句,应该能够可以

发誓过! 为发誓而努力 努力过必定是成功!
2005-01-05 10:38
ylinccax
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2005-1-4
收藏
得分:0 
二楼的少了一个判断,“1&lt;=n&lt;=20”

发誓过! 为发誓而努力 努力过必定是成功!
2005-01-05 10:44
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
不知道有没有理解错题意,
如果没有,这个题目可以用n进制,
题目的要求就是打印出所有小于n^n的n进制数(1代表0,2代表1,依此类推)

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-01-05 17:14
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:0 

#include <stdio.h>

int n, k, c[20];

search(x) int x; { int i; if(!x){ for(i=0; i<n; i++) printf("%d",c[i]); printf("\n"); return; } for(i=1; i<=n; i++){ c[k]=i; k++; search(x-1); k--; } }

main() { scanf("%d",&n); if(n<1||n>20)return; k=0; search(n); }

2005-01-06 17:25
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
得分:0 

盖茨厉害! 真是再次领略了递归算法的魅力。 出于非常喜爱算法的缘故,在下也在此发表一些观后拙见了, 如有错误,还请在座各位高手们不吝指正。

设计此递归程序步骤: 1. 首先得发现此问题是 递归可解类型的,即递归的,如得出所有n-1位排列数是得出所有n位排列数在规则上的一个复制,n-2,n-3...1位数皆亦如此。 2. 其次为程序设计一个递归出口,即当n等于1时,盖茨这儿用的是 search()函数形参为0。 3. 最后 for(i=1; i<=n; i++) { c[k]=i; k++; search(x-1); k--; } 偶对这个关键部分的理解 k初值为0,c[k]的值即表示第n位的值(最左位) k++,k--是为了使c[k]保持在原位即最左位能取到所有1~n 什么时候开始递归?自然当最左位向右移动一位,接下来的步骤就是对前位操作规则的复制。

[此贴子已经被作者于2005-1-6 22:21:42编辑过]


2005-01-06 22:18
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:0 
其实这种题用递归是最容易的,我最开始想的也是用循环,不过试着写了几个程序都不对,所以才想到换一个方法,当然首先就想到了这个。
2005-01-07 16:26
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 

我贴个自己写的递归算法。。。 #include <stdio.h> #include <stdlib.h> #include <conio.h>

void print_permutation(int *box,int n,int pos);

int main() { int *box; int n; printf("Input the number n="); scanf("%d",&n); box=(int*)malloc(n*sizeof(int)); if(!box) { printf("Cannot allocate memory!\n"); return 1; } print_permutation(box,n,0); free(box); getch(); return 0; }

void print_permutation(int *box,int n,int pos) { if(pos<n) { for(int i=1;i<=n;i++) { box[pos]=i; pos++; print_permutation(box,n,pos); pos--; } } else { for(int i=0;i<n;i++) printf("%d",box[i]); printf("\n"); } }

[此贴子已经被作者于2005-2-26 19:35:45编辑过]


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-02-26 19:09
快速回复:[转帖]排列
数据加载中...
 
   



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

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