33,006
社区成员
发帖
与我相关
我的任务
分享
quanpai(*arr,int n,int count) /* *arr 为需要全排的,n为个数,count 为全部个数*/
{
if (n==1)
{ Foo(arr -(count -1),count,count); /*装篮*/
}
else
{
int li,tmp;
for(li =0;li<n;li++)
{
//取第一位
tmp = *arr;
*arr=*(arr+li);
*(arr+li)= tmp;
quanpai(arr+1,n-1,count);
//恢复现场
tmp = *arr;
*arr=*(arr+li);
*(arr+li)= tmp;
}
}
}
Foo(int *Lanzi,int N,int K,int count) /*Lanzi是篮子,N个苹果,K个篮子,count是篮子的总数*/
{ int i;
static int cnt;
if (K==1)
{ *Lanzi=N;cnt+; /*此处可以打印出各篮子的个数,需要用到Lanzi -(count-1)*/}
else
{
for (i=1;i<=N-K;i++)
{
*Lanzi=i;
Foo(Lanzi+1,K-1,N-i,count);
}
}
}
using System;
namespace CsdnTest
{
class Program
{
static int[] Result;
static int[] Counter;
static Char[] Apples;
static int BasketCount = 3;
static void Main(string[] args)
{
Apples = new char[] { 'A', 'B', 'C'};
Result = new int[Apples.Length];
Counter = new int[BasketCount];
Solve(Apples.Length - 1, BasketCount);
Console.ReadKey();
}
static void Solve(int currentIndex, int emptyCount)
{
if (currentIndex < emptyCount - 1)
return;
if (currentIndex == -1)
{
for (int i = 0; i < Result.Length; i++)
Console.Write("{0}-{1} ", Apples[i], Result[i]);
Console.WriteLine();
return;
}
for (int i = 0; i < BasketCount; i++)
{
Counter[i]++;
Result[currentIndex] = i;
if (Counter[i] == 1)
Solve(currentIndex - 1, emptyCount - 1);
else
Solve(currentIndex - 1, emptyCount);
Counter[i]--;
}
}
}
}