被珠子问题绕了好几天,考虑的太多,没有画好流程图就开始,导致程序杂论五章。
下面的是在网上找的参考的程序,是目前见过最简单的。
题目:Broken Necklace
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fin = fopen ("beads.in", "r");
FILE *fout = fopen ("beads.out", "w");
char str[702];
char str1[352];
int n,i,j=0;
int temp,max=1;
int temp2;
fscanf(fin,"%d",&n);/* input integer */
fscanf(fin,"%s",str);
strcpy(str1,str);
strcat(str,str1);
for(i=0;i<n;i++)
{
char ch=-52;
temp=0;
temp2=0;
for(j=i;j<i+n;j++)
{
if(str[j]=='w')
{
temp++;
continue;
}
if(ch==-52)
ch=str[j];
if(str[j]!=ch&&str[j]!='w')
{
temp2++;
ch=str[j];
if(temp2==2)
break;
}
temp++;
}
max=max>temp?max:temp;
}
fprintf(fout,"%d\n",max);
return 0;
}
思路:链接两个字符串,从第一个字符开始,计算这种情况下,可以得到的最大数。接下来i++,第一个字符被转移到字符串末尾,再在这种情况下计算得到的最大数。
其中,ch用来记录上一次的字符。temp是目前得到的最大数,temp2记录不同字符的个数。
例如:wrbrr + wrbrr
i=0; j=0~4的情况下,运行到j=3的时候,程序就跳出了,此时temp=3, temp2=2
i=1; j=1~5 字符串变成 rbrrw, 运行到j=3的时候,程序跳出,此时temp=2,temp2=2
i=2; j=2~6字符串变成brrwr,运行到循环结束,此时temp=5 也是这个字符串最大的分割结果