题目:
解题代码:
#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; }
本文介绍了一种通过剪切字符串来最大化连续相同字符数量的方法。该算法通过旋转字符串并计算每种排列下能获取的最大连续相同字符数,最终确定最佳剪切位置。
2万+

被折叠的 条评论
为什么被折叠?



