继续上代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 8
int getMinSize(int* a,int m){
int color=8;
int flag[9]={0};
int count=0,min=1<<10;
int j;
int minPosition;
for(int i=0;i<m;i++){
j=i;
printf("start %d",j+1);
while(1){
if(j>=m)
j=j%m;
if(flag[a[j]]==0){
flag[a[j]]=1;
--color;
}
++count;
if(color==0){
if(count<min)
min=count;
printf("---end %d\n",j+1);
break;
}
j++;
}
color=8;
count=0;
memset(flag,0,sizeof(int)*9);
}
return min;
}
int main()
{
srand((unsigned)time(NULL));
int test[20];//20个珠子
for(int i =0;i<20;i++){//初始化数组
test[i]=rand()%8+1;
printf(" %d",test[i]);
}
printf("\n");
printf("最少要%d个珠子才能包含所有的颜色",getMinSize(test,20));
return 0;
}
注意 由于珠子的颜色是随机生成的, 不能确保每一次运行都能把所有的颜色取到(有时候程序会进入死循环),可以适当的将珠子的总数目m取大一点,基本上就能覆盖所有的颜色了。