如何实现一个排列的算法

chenmin0728 2004-04-12 01:00:37
如何实现一个排列的算法(C#语言)
有两个参数sum , k.
例如,当sum=3,k=2.
下列的参数将被输出
1,2
1,3
2,1
2,3
3,1
3,2.
即实现对于给定的sum和k(sum>k) , 找出所有的排列,数字不能重复,必须是有顺序的
组合!
谢谢!
...全文
36 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
athossmth 2004-04-12
  • 打赏
  • 举报
回复
上面是从0开是的,如果从1开始把a[i]=0和a[p]=0这两句0改成1就可以了。
athossmth 2004-04-12
  • 打赏
  • 举报
回复
#define N 5
#define K 3
main()
{
int a[N], p,i,flag;
for(i=0;i<N;i++) a[i]=0;
p=0;
while(p>=0)
{
if(a[p]==N)
{
p--;
a[p]++;
}
else
{
f = 0;
for(i=0;i<p;i++)
if(a[i]==a[p])
{
f=1;
break;
}
if(f==0)
{
if(p==K-1)
{
printf("\n");
for(i=0;i<K;i++) printf("%d", a[i]);
a[p]++;
}
else
{
p++;
a[p] = 0;
}
}
else
a[p]++;
}
}
}

lczddd 2004-04-12
  • 打赏
  • 举报
回复
不行啊,你的这个好像有点难度啊,呵呵
chenmin0728 2004-04-12
  • 打赏
  • 举报
回复
我的意思是从sum个数字中取出任意k个数,进行排列组合,并把每种组合输出来。
例如,sum=9,k=4,即从9个数中任意取4个,有顺序的(1,2,3,4和4,2,3,1)
算两种!
如何把这些结果输出来!
lczddd 2004-04-12
  • 打赏
  • 举报
回复
那就在加一个for语句就搞定了
greatsft 2004-04-12
  • 打赏
  • 举报
回复
for(int i=1;i<=sum;i++)
{
for(int j=1;j<=sum;j++)
{
if(i!=j)
{
System.Console.Write(i+",");
System.Console.Write(j);
System.Console.Write("\r\n");
}
}
}
System.Console.Read();

/////////////////
按照你的说法,这个算法和k是没关系的
wish u good luck
Greatsft
lczddd 2004-04-12
  • 打赏
  • 举报
回复
for(int i=1;i<=sum;i++)
for(int j=1;j<=sum;j++)
{
if(i!=j) textBox1.AppendText((i.ToString() + "," + j.ToString() +"\n" ));

}
lczddd 2004-04-12
  • 打赏
  • 举报
回复
自己修改一下,因改可以了,呵呵
lczddd 2004-04-12
  • 打赏
  • 举报
回复
for(i=1,i++,i<=sum)
for(j=1,j++,j<=sum) {
if(i!=j) print (i + "," + j )
}
chenmin0728 2004-04-12
  • 打赏
  • 举报
回复
是的,k就是每个组合输出的数目!sum是总共有几个数!
smartcreater 2004-04-12
  • 打赏
  • 举报
回复
问题不清白,k在这里有什么含义?(是不是每个组合输出k个数?)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧