递归求解m个白球和n个黑球
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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("请输入白球的个数:");
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);
}
在一个黑袋中共有m个白球和n个黑球(m,n>0),袋外还有一些白球。每次随机从袋中取出两球,若取出的球颜色相同,则放回一白球;若取出两球颜色不同,则放回一黑球,直到取完(取出最后两球不放回)。请编程求多少种取法,并说明最后两球的颜色。(用递归方法求解)
看看是否符合你的要求:
#include<stdio.h>
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); //产生随机位置
#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");
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("请输入白球的个数:");
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);
}
在一个黑袋中共有m个白球和n个黑球(m,n>0),袋外还有一些白球。每次随机从袋中取出两球,若取出的球颜色相同,则放回一白球;若取出两球颜色不同,则放回一黑球,直到取完(取出最后两球不放回)。请编程求多少种取法,并说明最后两球的颜色。(用递归方法求解)
看看是否符合你的要求:
#include<stdio.h>
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); //产生随机位置
#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");