编写一个程序证明吉尔布雷德原理,感激不尽啊,
:拿出一副扑克牌,将大,小王去掉,使他们红黑相间,再把这副牌分成两叠,让每叠下面的那张牌颜色不同,接着把牌再洗在一起。然后,从洗过的牌底下逐对拿牌。这时,奇迹就会出现,不管原理如何洗牌,拿出的牌总是一红一黑
想到一个用枚举法的,但逻辑上只能保证在 n 次试验下原理正确,程序应该不需要注释
#include <stdio.h>
#include <stdlib.h>
void xipai(int a[],int b[],int c[]);
int judge(int c[]);
int main(void)
{
int a[26];
int b[26];
int c[52];
int i,j,n;
for(i=0;i<26;i+=2)
{
a[i]=1;
a[i+1]=0;
}
for(i=0;i<26;i+=2)
{
b[i]=0;
b[i+1]=1;
}
n=1000;
for(i=0;i<n;i++)
{
xipai(a,b,c);
j=judge(c);
if(j==0)
break;
}
if(j==1)
printf("good\n");
return 0;
}
void xipai(int a[],int b[],int c[])
{
int i=0,j=0,n,k;
for(k=0;k<52;k++)
{
n=rand()%2;
if(n==1)
{
c[k]=a[i];
i++;
}
else
{
c[k]=b[j];
j++;
}
}
}
int judge(int c[])
{
int i;
for(i=0;i<26;i+=2)
{
if(c[i]==c[i+1])
return 0;
else
continue;
}
return 1;
}