题意 :将给定的字符串编码,编码的规则根据两条,1.如果字符串里有连续相等的字符,就变为两个字符,一个是这些连续相同的字符的个数,另一个是这个字符,但是如果数量超过了9个,那就输出9再输出这个字符,剩下的重新按照规则进行,例如AAAA,就输出4A,AAAAAAAAAAA输出9A2A,2.如果字符串里有连续不相等的字符,就将这些字符原样输出并且在前后各加一个1,如果字符串里有刚好有个1,就将这个1变为11,AAAABCCC输出4A1B13C,123444输出11123134,1111111111输出911111。
思路 :就是一道顶麻烦的题,如果不好好读题的话,就很难办,因为有很多细节问题都需要注意,比如说输入空格也算字符,输入换行也要处理。最后一组样例是10个1,按照编码规则先输出9个1,还剩一个1就要根据规则2进行编码,因为是1个1所以要在前后各加一个1,又因为是一个单独的1,所以要把1变成11

#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> const int maxn = 424567 ; char sh[maxn] ; char ch[maxn] ; using namespace std; int main() { while(gets(sh)) { int x = 0,j ; int len = strlen(sh) ; // printf("%d",len); for(int i = 0 ; i < len ; ) { j = i + 1; if(sh[i] == sh[j]) { while(sh[i] == sh[j]) { j++ ; if(j - i >= 9) break ; } ch[x++] = j-i+'0' ; ch[x++] = sh[i] ; i += (j-i) ; } else { while((sh[j] != sh[j+1] && j+1 < len) || j == len-1) j++ ; ch[x++] = '1' ; for(int ii = i ; ii < j ; ii++) { ch[x++] = sh[ii] ; if(sh[ii] == '1' ) ch[x++] = '1' ; //if(j == 0 && sh[j] != sh[j+1]) //ch[x++] = '1' ; } ch[x++] = '1' ; i += (j-i) ; } } ch[x] = '