一串首尾相连的珠子(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取大一点,基本上就能覆盖所有的颜色了。
#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取大一点,基本上就能覆盖所有的颜色了。
相关文章推荐
- 一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10), 设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 字符串匹配之通配符问题------一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。
- 字符串匹配之通配符问题------一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 【编程题目】一串首尾相连的珠子(m 个),有 N 种颜色(N<=10),取出其中一段,要求包含所有 N 中颜色,并使长度最短。
- 一串首尾相连的珠子(m个),有N种颜色(N<=10),取出其中一段,要求包含所有N中颜色,并使长度最短
- 40_2 取出首尾相连的珠子中一段,要求包含所有N颜色,并长度最短。 滑动窗口问题
- 有一串首尾相连的珠子,共有m个,每一个珠子有一种颜色,并且颜色的总数不超过n(n<=10),求连续的珠子的颜色总数为n时,长度最小的区间。
- 一串首尾相连的珠子(m个),有N种颜色(N<=10),使得最短的字符串包含全部颜色
- 有如图所示的七巧板,试设计算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互补相同,打印输出所有可能的涂色方案。
- 34. 百度研发笔试题: 一串首尾相连的珠子(m个),有N种颜色(N<=10)
- 一串首尾相连的珠子共m个,其中有n中颜色,求出包含全部这n种颜色的最短的串。
- ACM457现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。输入 第一行只有一个整数m(m<=10),表示测试数据组数。
- 求有N种颜色的珠子串中包含所有颜色的最短子串