我大概写了个:(结果得到6组,实际上第一堆和第二堆位置颠倒,本质只有3组,可以看下)
#include <stdio.h>
#include <stdlib.h>
void zuhe(int a[],int n,int m,int s)//从n个元素的数组a中,取m个元素的组合
{
int index,i,j,x=0,p[6],q[6]
int s2,l=1
int item1[6],item2[6]
index=0
p[index]=0
while(1)
{
if(p[index]>=n)
{
if(index==0)
{
break
}
index--
p[index]++
}
else if(index==m-1)//满足12选6组合
{
s2=0
x=0
for(i=0i<mi++)s2+=a[p[i]]
if(s2==s)//满足平分,得出第一堆p[6]
{
for(i=0i<12i++)
{
for(j=0j<mj++)
if(i==p[j])break
if(j==m)q[x++]=i//筛选第二堆q[6]
}
printf("%d.",l)
printf("第一堆:")
for(i=0i<mi++)printf("%3d",a[p[i]])
printf(" ")
printf("第二堆:")
for(i=0i<xi++)printf("%3d",a[q[i]])
printf("\n")
l++
}
p[index]++
}
else
{
index++
p[index]=p[index-1]+1
}
}
}
main()
{
int i,s=0
int items[12]={98,93,57,64,50,82,18,34,69,56,16,61}
for(i=0i<12i++)s+=items[i]
s/=2//算出平分值
zuhe(items,12,6,s)
}
#include<stdio.h>#include <stdlib.h>
int main()
{
int i=0,n = 100
while(n > 0)
{
n = n / 4 - 1
i++
}
printf("\n%d天后卖完西瓜\n",i)
system("pause")
return 0
}