c语言西瓜问题

Python051

c语言西瓜问题,第1张

其实想法相对好理解 就是12个数中任意选取其中6个数相加等于总和的一半,然后筛选出来,难点是如何穷举组合

我大概写了个:(结果得到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("%d天后剩余西瓜%d\n",i,n)

   }

   printf("\n%d天后卖完西瓜\n",i)

   system("pause")

   return 0

}