这么个所谓简单的题目弄了一下午加一晚上,呵呵,怎么也算不对。
一定会有一个简单的方法。
晚上去新都回来后,又坐在电脑面前思索这个问题。
多次删除写出的眼看就要成功的代码,因为不够简洁。
突然顿悟:
1.串相联;
假设数数当前位置为pos;
2.k[pos]==‘w',不可能是最大。
3.k[pos+1]=='w',不可能是最大。
4.k[pos]=k[pos+1],不可能是最大。
5.pos==0,不能往左数。
所以,
6.只有k[pos]!=k[pos+1]才有可能数出最大:
即'r','b',或'b','r'这种组合才可能最大。
所以,最后的算法是,找到合适的pos,
从pos往左数+从pos+1往右数这些组合,找出最大的,呵呵!
7.看似完美,没有完全通过。呵呵,再来!
/*
ID: qq104801
LANG: C
TASK: beads.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* for debug only:counter
*/
void debug_dummy(void)
{
return;
}
int n;
char k[600];
int count(int pos)
{
int index=0;
int l=1,r=1;
if (k[pos]=='w' || k[pos+1]=='w' || k[pos]==k[pos+1] || pos<1)
return 1;
index=pos;
while(--index && index>=0)
{
if ((k[index]==k[pos]) || (k[index]=='w'))
l++;
else
break;
}
index=pos+1;
while(++index && k[index]!='