这是杭电OJ上的1020题,附上菜鸟级别的自己敲的代码,改了几遍一直WA,也是无语了。目前为止还是没找到原因,故求还在解同一题的各位大神。
#include<iostream> #define max 10002 using namespace std; int main() { char a[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int t, count[27],len,b; char str[max],str1[10]; cin >> t; while (t--) { cin >> str; len = strlen(str); memset(count, 0, sizeof(int)* 27); for (int i = 0; i < len; i++) { b = str[i] - 'A'; count[b]++; } for (int i = 0; i < 27; i++) { if (count[i]>1) { sprintf(str1, "%d", count[i]); cout << str1 << a[i]; } else if (count[i] == 1) cout << a[i]; } cout << endl; } return 0; } </iostream>
以下附上的是1020Discuss中大神敲的代码,代码我拿了,求该大神不喷,至少我重新整理了一下,并加了注释,AC代码如下:
#include<iostream> using namespace std; char c[10005]; int main() { int i, j, k, t, len, cnt; cin >> t; for (i = 0; i < t; i++) { cin >> c; len = strlen(c); k = 0; cnt = 1; for (j = 1; j <= len; j++) { if (c[j] != c[k]) // 相连两字母不同,则开始输出,就像移动卡尺 { if (cnt != 1) cout << cnt; cout << c[k]; k = j; cnt = 1; continue; } cnt++; } cout << endl; } return 0; } </iostream>
