暴力枚举下就行了,没有算法。。不过要细心点。。我开始的时候那while循环逻辑写错了,卡了半天,去找了测试数据才知道错哪了。。还是逻辑不够严密
#include<stdio.h> #include<string.h> int main() { char s[41]; while (gets(s), strcmp(s, "END") != 0) { int len = strlen(s); int ip, d; int maxcount = -1, maxlen = -1, maxip = -1, mind = 0xFFFFFFF; for (ip = 0; ip < len; ip++) { for (d = 1; d <= len - ip; d++) { int count = 0, length = ip; while (s[length] == '.') { length += d; count++; if (length >= len) { length -= d; break; } } if (count > maxcount) { maxcount = count; maxip = ip; mind = d; maxlen = length; } else if (count == maxcount) { if (length > maxlen) { maxip = ip; mind = d; maxlen = length; } else if (length == maxlen) { if (ip > maxip) { maxip = ip; mind = d; } else if (ip == maxip) { if (d < mind) mind = d; } } } } } printf("%d %d\n", maxip, mind); } return 0; }