杭州电子科技大学acm1020

来源:百度知道 编辑:UC知道 时间:2024/06/21 22:47:45
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[10000];
char b[10000];
int len=0,i=0,num=0;
int n;
while((cin>>n)&&n)
{
while(n--)
{
cin>>a;
len=0;num=1;i=0;
while(a[i]!='\0')
{
while((a[i]==a[i+1])&&a[i+1]!='\0')
{
i++;
num++;
}//end while(a[i]==a[i+1])
if(num==1)
{ b[len]=a[i];len++;}
else
{
b[len]=num+'0';
b[len+1]=a[i];
len+=2;
num=1;
}
i++;
}//end while(a[i]!='\0')
b[len]='\0';
cout<<b<<endl;
}
}
return 0;
}
//////////////////////
题目说明

Online Judge Problem Set Authors Online Conte

兄弟,你很吝啬诶,这么麻烦的代码连点分也不给,这样是不对的兄弟,不过算了,同样爱好AC的我就不吝啬了:

你代码在处理整数的时候错了, b[len]=num+'0';这个地方不对,因为ASK码只有0-9,这里只要字符数超过9就会输出错误了,例如:AAAAAAAAAA 输出应该是10A,但是你的代码输出是 :A。

所以不可以这样,应该是整数和字符分开输出,这样的话代码也会简单很多。

我把我的代码发你看吧,你这个改不了了,太麻烦了,要改还要调用一个整数化字符函数:(c应该看得懂吧)
#include<stdio.h>
void main()
{
int n,i,t;
char a[10000],k;
scanf("%d%*c",&n);
while(n--&&gets(a))
{
t=1;
for(i=0;a[i]!='\0';i++)
{
if(a[i]==a[i+1])t++;
else
{
if(t==1)printf("%c",a[i]);
else
{
printf("%d%c",t,a[i]);
t=1;
}
}
}printf("\n");
}
}