问题描述:
看和说的顺序定义如下:任何一个字符串都是以数字开头,每个随后的元素都是被前一个元素重新定义。例如,字符串“122344111”可以被描述为“1个1,两个2,1个3,2个4和3个1”。因此,122344111以序列的形式表示出来就是1122132431。同理,101就表示1111111111。
输入:
输入包括测试数据的组数,然后依次为相应的测试数据,每个数据占一行,不会超过1000位。
输出:
对于每个测试数据,输出对应的字符串。
输入样例:
3
122344111
1111111111
12345
输出样例:
1122132431
101
1112131415
解题分析(我一开始还想开一个整数数组记录每个数字出现次数,然后按次数输出相应下标值,不过这个解题分析思路真的妙蛙):
本题比较简单,就是对读入的字符串数字进行统计,如果和前一个相同,计数器加1,如果不同则输出计数器的值和该数字。然后继续,直到结束。
代码(注意整数与字符型数据之间的转化)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i,n,j,r=1;
scanf("%d",&n);
char str[1000];
for(i=0;i<n;i++){
scanf("%s",str);
for(j=0;j<strlen(str);j++){
if(str[j]==str[j+1]) r++;
else{
printf("%d%d",r,str[j]-'0');//字符型值转换为整数值
r=1;
}
}
printf("\n");
}
return 0;
}