0123456789
0123456798
0123456879
...........
...........
9876543210
一行数中不能有重复的数字。
要求:不用goto,少用嵌套循环,嵌套不超过6次,越少越好
求一算法,我百思不得其解,大家有什么好建议,尽管提出来,在这,我先谢过大家了。
----------------解决方案--------------------------------------------------------
我回去给你想想````
----------------解决方案--------------------------------------------------------
没想出来 大家一起努力啊
不过我觉得我们可以先把3个的写出来再类推上去
例如如果是012的话他就有3*2种012
021
102
120
201
210
我们来分析一下,我们定义一个数组a[3]={0,1,2}
那么我们要做的有哪几步呢?
1首先printf("%d%d%d",a[0],a[1],a[2]);
2接下来我们需要将a[1],a[2]的位置换一下然后再printf("%d%d%d",a[0],a[1],a[2]);
3将a[0]与a[1]换,printf
4将a[1]与a[2]换,printf
5将a[0]与a[1]换,printf
6将a[1]与a[2]换,printf
貌似有点规律,你试着把它推广到10个数上试试行不行?
再想想函数递归调用,我感觉能用上~~~因为有事所以先走一步,我回去也好好想想~~~~
----------------解决方案--------------------------------------------------------
有道理,我再好好想想!
----------------解决方案--------------------------------------------------------
明显用DFS,当然我也见过非DFS的算法,是基于交换的。让我想想看还能不能写出来
----------------解决方案--------------------------------------------------------
这就是那个基于交换的算法,它的思想可能对于没学过DFS的人来说更容易接受,而且避免了DFS中一个判重复问题,还是不错的一个算法。
#include <iostream>
using namespace std;
int x[10]={0,1,2,3,4,5,6,7,8,9};
void out(int* a,int n)
{
if(n){
printf(\"%d\",a[0]);
}
for(int i=1;i<n;i++){
printf(\" %d\",a[i]);
}
printf(\"\n\");
}
void p(int n,int k=0)
{
if(k==n){
out(x,n);
}
else {
for(int i=k;i<n;i++){
swap(x[k],x[i]);
p(n,k+1);
swap(x[k],x[i]);
}
}
}
int main()
{
p(10);
}
----------------解决方案--------------------------------------------------------
我总是不分C板块和C++板块,重写一遍
#include <stdio.h>
int x[10]={0,1,2,3,4,5,6,7,8,9};
void out(int* a,int n)
{
int i;
if(n){
printf(\"%d\",a[0]);
}
for(i=1;i<n;i++){
printf(\" %d\",a[i]);
}
printf(\"\n\");
}
void swap(int* a,int* b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void p(int n,int k)
{
int i;
if(k==n){
out(x,n);
}
else {
for(i=k;i<n;i++){
swap(&x[k],&x[i]);
p(n,k+1);
swap(&x[k],&x[i]);
}
}
}
void pemutation(int n)
{
p(n,0);
}
int main()
{
pemutation(10);
}
----------------解决方案--------------------------------------------------------
stl,恩恩
----------------解决方案--------------------------------------------------------
这个很详细:
http://bbs.bc-cn.net/viewthread.php?tid=90424&star=at#
----------------解决方案--------------------------------------------------------
,,,,,,,,,,,,,
----------------解决方案--------------------------------------------------------