您的位置:首页 > 其它

一串首尾相连的珠子(m个),有n种颜色(n<=10) 设计一种算法去除其中一段,要求包含所有的N种颜色

2013-09-04 20:39 609 查看
继续上代码:

#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取大一点,基本上就能覆盖所有的颜色了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐