题目:
解题代码:
#include <stdio.h>
#include <string.h>
main() {
int count(char *s, int start, int end);
char src[120], temp;
int i = 0, j = 0, num = 0, len = 0;
int cut = 0, maxc = 0;
printf("请输入代表不同颜色珠子字符串:\n");
scanf("%s", src);
len = strlen(src);
// for循环尝试不同的剪开方式
for(i = 0; i < len; i++) {
num = count(src, 0, len-1);
if(num < len) {
num += count(src, len-1, num);
}
if(num > maxc) {
cut = i;
maxc = num;
}
// 数组src的元素循环向左移动一个位置
temp = src[0];
for(j = 1; j < len; j++) {
src[j-1] = src[j];
}
src[len-1] = temp;
}
printf("在第 %d 号珠子前面剪开,可以取走 %d 颗珠子。\n", cut, maxc);
}
/*
count函数用来计算给定字符串s从start位置开始,相同字母的个数
*/
int count(char *s, int start, int end) {
int i = 0, result = 0;
int color = s[start];
int step = (start > end) ? -1 : 1;// 这一步很精髓
for(i = start; color == s[i]; i += step) {
if(step>0 && i>end || step<0 && i<end) {
break;
}
result++;
}
return result;
}