📄 subject_49749.htm
字号:
<p>
序号:49749 发表者:雨伞 发表日期:2003-08-13 15:52:53
<br>主题:新手求教一个算法问题.
<br>内容:问题不复杂,如下:<BR>假定有一列数组 int array[3]={1,2,3};<BR>怎样设计一个函数 move(...){...};使得此函数每运行一次,数组中数字的位置发生变化,返回一个新的数组,不能有重复,且能遍历所有的排列方式<BR>例如:<BR>{1,2,3}<BR>{2,1,3}<BR>{2,3,1}<BR>{3,2,1}<BR>{3,1,2}<BR>{1,3,2}<BR><BR>上面的例子是3个数字,如果有25个数字,怎么设计这个函数?<BR>请出手相助,谢谢
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:wuyanmintiger 回复日期:2003-08-13 17:06:29
<br>内容:全排列:<BR><BR>#include "stdafx.h"<BR>#include "iostream.h"<BR><BR>#define MAX 10<BR><BR>int total=0;<BR><BR>void f(int * data,int * flag,int * result,int n,int count)<BR>{ int i;<BR> if(count==1)<BR> { for(i=0;i<n-1;i++)<BR> cout<<result[i]<<" ";<BR> i=0;<BR> while(flag[i]==1)<BR> i++;<BR> cout<<data[i]<<endl;<BR> total++;<BR> }<BR> else<BR> { for(i=0;i<n;i++)<BR> { if(flag[i]==1)<BR> continue;<BR> result[n-count]=data[i];<BR> flag[i]=1;<BR> f(data,flag,result,n,count-1);<BR> flag[i]=0;<BR> }<BR> }<BR>}<BR><BR><BR>int main(int argc, char* argv[])<BR>{ int data[MAX], flag[MAX], result[MAX], n, count, i;<BR><BR> for(i=0;i<MAX;i++)<BR> { data[i]=i+1;<BR> flag[i]=result[i]=0;<BR> }<BR> <BR> n=MAX+1;<BR> while(n>MAX || n<1)<BR> { cout<<"Please input a number (0<n<"<<MAX<<") :";<BR> cin>>n;<BR> count=n;<BR> if(n>MAX || n<1)<BR> cout<<endl<<"\t\tInput Number Error (0<n<"<<MAX<<")!"<<endl;<BR> }<BR> <BR> f(data,flag,result,n,count);<BR><BR> cout<<endl<<endl<<"\tthe total is :"<<total<<endl;<BR><BR> return 0;<BR>}<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:雨伞 回复日期:2003-08-15 00:02:26
<br>内容:谢了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -