当前位置:文档之家› 递归求解m个白球和n个黑球

递归求解m个白球和n个黑球

p[x]=1ห้องสมุดไป่ตู้ //随机放入m个白球
}
for(i=0;i<m+n;i++)
if(!p[i])
p[i]=2; //其余n个空间放黑球
printf("\n");
k=quqiu(p,m+n);
printf("共有%d种取法!\n",k);
}
scanf("%d",&m);
printf("请输入黑球的个数:");
scanf("%d",&n);
p=(int *)malloc(m+n);//申请m+n个空间,1为白球,2为黑球
for(i=0;i<m+n;i++)
p[i]=0;
for(i=1;i<=m;i++)
{
x=rand()%(m+n); //产生随机位置
在一个黑袋中共有m个白球和n个黑球(m,n>0),袋外还有一些白球。每次随机从袋中取出两球,若取出的球颜色相同,则放回一白球;若取出两球颜色不同,则放回一黑球,直到取完(取出最后两球不放回)。请编程求多少种取法,并说明最后两球的颜色。(用递归方法求解)
看看是否符合你的要求:
#include<stdio.h>
else
printf("黑球\n");
return ++k;
}
else
{
if(p[x-1]==p[x-2])
p[x-2]=1;
else
p[x-2]=2;
k++;x--;
quqiu(p,x); //递归调用
}
return k;
}
main()
{
int *p,m,n,k,i,x;
printf("请输入白球的个数:");
#include<stdlib.h>
int quqiu(int *p,int x)
{
static int k=0;
if(x==2)
{
printf("最后两个球是:");
if(p[x-1]==1)
printf("白球、");
else
printf("黑球、");
if(p[x-2]==1)
printf("白球\n");
相关主题