Description
Given a string containing only 'A' - 'Z', we could encode it using the following method:
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
Input
The first line contains an integer N (1 <= N <= 100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only 'A' - 'Z' and the length is less than 10000.
Output
For each test case, output the encoded string in a line.
Sample Input
2 ABC ABBCCC
Sample Output
ABC A2B3C思路:一开始以为是输出所有的相同的,所以WA了两次,原来是子串的相同,要临近的数才能组合一起。。。。。我的代码:#include <iostream> #include <cstring> using namespace std; int main() { int i,k,n,count; char a[10010]; cin >> n; while (n--) { cin >> a; k=strlen(a); if (k==1) { cout << a << endl; continue; } for (i=0,count=1;i<k;++i) { if (a[i]!=a[i+1]) { if (count!=1) { cout << count ; count=1; } cout << a[i]; } else { count++; } } cout << endl; } return 0; }
网上的代码:
#include <stdio.h> #include <string.h> int main(){ int n,i,num; char str[10001];//题目要求是10000个字符,我们要开大一点 scanf("%d",&n); while(n--){ num=1; scanf("%s",str); for(i=0;i<strlen(str);i++){ if(str[i]==str[i+1]){ //如果一个字符跟它后面的字符相同则num++; num++; } else{ if(num<=1) { printf("%c",str[i]); num=1;}//记住num要重置为1,不然残留后会导致后面出现错误 else{ printf("%d%c",num,str[i]); num=1;} } }printf("\n"); }return 0; }