求一简单算法~

wangdr 2004-09-29 02:29:55
在1,2,3,4,5,6,7,8,9,10(或者更多数字)
这些个数中获得任意6个数字(任意6个数字不能重复)的全部组合
比如:1 2 3 4 7 9
2 3 4 5 7 8
3 4 5 6 7 9
1 5 7 8 9 10
4 5 6 7 8 10
等等
...全文
165 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
songbird 2004-09-29
  • 打赏
  • 举报
回复
这个验证过了:

class Class1
{
static int num = 4;
static int[] a = new int[num]; //存放数字
static int[] b = new int[num]; //存放每一组临时的数字组合
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
for (int i=0;i<num;i++)
{
a[i] = i;
}

all(0);

Console.ReadLine();
}

//赋值

static private void all(int start)
{
if (start==num)
{
bool same = false;
for (int j=0;j<start;j++)
{
for (int i=0;i<start;i++)
{
if ((i != j) && (b[i] == b[j]))
{
same = true;
break;
}
}
}

if (!same) printb();
return;
}

for (int i=0; i<num; i++)
{
b[start] = i;
all(start+1);
}

}

static private void printb()
{
for (int i=0;i<num;i++)
{
Console.Write(a[b[i]] + " ");
}
Console.WriteLine();
}

}
jolyalansunrain 2004-09-29
  • 打赏
  • 举报
回复
把数字存放进一个数组呀,如:

void FindAll(ref int [] a,int maxvalue)
{
for(int i=1;i<= maxvalue/2;i++)
for(int j=i+1; j <= maxvalue ;j++)
for(int k=j+1; k<= maxvalue;k++)
for(int m=k+1; m<=maxvalue;m++)
for(int n=m+1; n<=maxvalue;n++)
for(int l=n+1; l<=maxvalue;l++)
System.Console.WriteLine("{0}-{1}-{2}-{3}-{4}-{5}",a[i],a[j],a[k],a[m],a[n],a[l]);

return;
}

void main()
{
int maxvalue = 10;
int Array [] = new a[maxvalue];//记得给他赋值

FindAll(ref a,maxvalue);
}
Korny 2004-09-29
  • 打赏
  • 举报
回复
public class CodeForComb

{ 
        static int [] CombData=new int[10];

         static void Main()
{  
   a[0]=6;//打印6个数
comb(7,6); //按7中取6个不同的组合数

}


static void comb(int m,int k)
{
int i,j;
for( i=m;i>=k;i--)
{
CombData[k]=i;
if(k>1)
comb(i-1,k-1);//还有其他组合数 递归

else  //有一组组合数了
{
for(j=a[0];j>0;j--)
{
Console.Write(CombData[j]);
}
Console.WriteLine();

}
}
}

  
songbird 2004-09-29
  • 打赏
  • 举报
回复
应该是start == 10
songbird 2004-09-29
  • 打赏
  • 举报
回复
方法:
把数字存放进一个数组

int[] a = new int[10]; //存放数字
int[] b = new int[10]; //存放每一组临时的数字组合
//赋值

private void all(int start){
for (int i=start; i<10; i++){
b[start] = a[i];
all(start+1);
}
if (i==10){
printb();
}
}
jeall 2004-09-29
  • 打赏
  • 举报
回复
不是楼上说的n次方,应该是C6/n的排列组合!
foow 2004-09-29
  • 打赏
  • 举报
回复
最小的连续数字是几位
两位,比如 1 2 5 7 9 10 11
songbird 2004-09-29
  • 打赏
  • 举报
回复
n的n次方。
wangdr 2004-09-29
  • 打赏
  • 举报
回复
smartcreater()这样做可以~但给出的数字是连续的才行~比如1,2,3,4,5,6,7
我要是给出1,4,5,6,7,9,10就不行了~
smartcreater 2004-09-29
  • 打赏
  • 举报
回复
class demo1
{
public static void Main()
{ int maxvalue = 10;
for(int i=1;i<=maxvalue/2;i++)
for(int j=i+1; j<= maxvalue ;j++)
for(int k=j+1; k<= maxvalue;k++)
for(int m=k+1; m<=maxvalue;m++)
for(int n=m+1; n<=maxvalue;n++)
for(int l=n+1; l<=maxvalue;l++)

System.Console.WriteLine("{0}-{1}-{2}-{3}-{4}-{5}",i,j,k,m,n,l);
}
harisonh2l 2004-09-29
  • 打赏
  • 举报
回复
210
wangdr 2004-09-29
  • 打赏
  • 举报
回复
顶一下~
wangdr 2004-09-29
  • 打赏
  • 举报
回复
我可能没说清楚,
比如有1,2,3,4,5,6,7这7个数字:
他们的任意6个数字的组合只能有下面几种情况:
1 2 3 4 5 6
1 3 4 5 6 7
1 2 4 5 6 7
1 2 3 5 6 7
1 2 3 4 6 7
1 2 3 4 5 7
2 3 4 5 6 7
对吧~
但是数字越多出先的组合也越多~所以想做个程序把这些组合给找出来~
nanhaiyiou 2004-09-29
  • 打赏
  • 举报
回复
二楼好理解。三楼的比较好!
v192 2004-09-29
  • 打赏
  • 举报
回复
你可以把数字存放到一个队列里面,然后套用我的办法处理
v192 2004-09-29
  • 打赏
  • 举报
回复
System.Random Rnd = new Random();
for ( int i = 0 ; i < dtSmallPapers.Rows.Count - 5; i++ )
{
  int j = Rnd.Next( 0, dtSmallPapers.Rows.Count );
  dtSmallPapers.Rows.RemoveAt( j );
}

上面是在一个DataTable中有若干条数据,只取其中的随机5条。
hbzx 2004-09-29
  • 打赏
  • 举报
回复
改正:
int max=10,count=6;
for ( int i=max ; i > max-count; i --)
{
i = i * (i -1) ;
}
hbzx 2004-09-29
  • 打赏
  • 举报
回复
int max=10,count=6;
for ( int i=max ; i > max-count; i --)
{
i = i * i -1 ;
}

110,538

社区成员

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

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

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