杭电 ACM 1020 题 一直wrong answer
#include <string.h>
int main()
{
int line = 0;
scanf("%d", &line);
while(line--)
{
char shuru[10000] = {'0'};
int num = 1;
fflush(stdin);
gets(shuru);
char tmp = shuru[0];
for(int i=1; i<=strlen(shuru); i++)
{
if( tmp == shuru[i])
{
num++;
}
else
{
if(num >1)
{
printf("%d%c", num, tmp);
num = 1;
}
else
{
printf("%c", tmp);
}
}
tmp = shuru[i];
}
printf("\n");
}
return 0;
} 展开
这个是很水的题,但是你的code还是反应了一些你的问题,如果去面试,就会有不好的印象,忠言逆耳啊。我改的有注释,改你的测试结果15ms AC(一次结果,这个时间可能不是稳定的)
#include <stdio.h>
#include <string.h>
int main()
{
int line = 0;
scanf("%d", &line);
getchar();
while(line--)
{
char shuru[10004] = {0};//原来为何要在while里面申请数组数据?,初始化为何要字符‘0’,不是0 ,输入1个字符需要2个空间,最后要个0, 1004是4字节对齐。这些细节都是效率问题
int num = 1;
// fflush(stdin);ACM里面一般不清除文件缓冲区
gets(shuru);
char tmp = shuru[0];
int len=strlen(shuru);
for(int i=1; i<=len; i++)
{
if( tmp == shuru[i])
{
num++;
}
else
{
if(num >1)
{
printf("%d%c", num, tmp);
num = 1;
}
else
{
printf("%c", tmp);
}
}
tmp = shuru[i];
}
printf("\n");
}
return 0;
}
下面这个简洁点的代码多次测试都是0ms,感谢"释放_Eric"的code参考。
参考:编程中国风
#include<stdio.h>
#include<string.h>
void main()
{
char f[10004];
int n,i,j,k,sum;
scanf("%d",&n);
getchar();//防止输出第一个空行
while(n--)
{
gets(f);
k=strlen(f);//一次get防止多次调用浪费时间,
for(i=0;i<k;)
{
sum=1;
for(j=i+1;j<=k;j++)
{
if(f[i]==f[j])
sum++;
else
{ if(sum==1)
{
printf("%c",f[i]);i=j;
}
else
{
printf("%d%c",sum,f[i]);i=j;
}
break;
}
}
}
printf("\n");
}
}