Visitors hit counter dreamweaver

poj1016 字符串的压缩

     一开始自己写的。TLE。。。哎。用的太多的for,什么叫代码的优美性?高效性??我自己写的就没考虑过那些情况,要什么就用什么。不行啊!      改了之后才知道,我自己写的是多么的垃圾。才感觉到效率是多么的总要  你还有很长的路要走啊,孩子。慢慢学着点吧。没事,慢慢来。下面贴出我自己的代码和修改后的代码。好好对比,好让日后自己看看自己当时是多么的搓!

自己写的TLE代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

char str[81];
char s[15][31];
int turn,k;

void compress(char *no,int t)
{
int times[10]={0}; //记录数字出现次数
int i;
if(t<15) //15 iterative
{
for(i=0; i<strlen(no); i++)
{
times[no[i]-'0']++;
}
k=0;
for(i=0; i<=9 ;i++)
{
if(times[i]>9)
{
int dec=times[i]/10; //十位
int sin=times[i]%10; //个位
s[t][k++]=dec+'0';
s[t][k++]=sin+'0';
s[t][k++]=i+'0';
}
else if(times[i]>0)
{
s[t][k++]=times[i]+'0';
s[t][k++]=i+'0';
}
}
s[t][k]='\0';
compress(s[t],t+1);
}
}

int main()
{
freopen("acm.txt","r",stdin);
while( scanf("%s",str)!=EOF && str[0]!='-')
{
int i=0,j=0;
bool output=false;
memset(s,NULL,sizeof(s));
turn=0; k=0;
compress(str,turn);
if(strcmp(str,s[0])==0)
{
printf("%s is self-inventorying\n",str);
output=true;
}

for(i=0; i<14 && !output; i++)
{
if(strcmp(s[i],s[i+1])==0)
{
printf("%s is self-inventorying after %d steps\n",str,i+1);
output=true;
}
}

for(i=1; i<15 && !output ; i++)
{
if(strcmp(s[i],str)==0)
{
printf("%s enters an inventory loop of length %d\n",str,i+1);
output=true;
}
}

for(j=2; j<15 && !output; j++)
{
for(i=0; i=j-2; i++)
{
if(strcmp(s[j],s[i])==0)
{
printf("%s enters an inventory loop of length %d\n",str,j-i);
output=true;
break;
}
}
}

if(!output)
{
printf("%s can not be classified after 15 iterations\n",str);
}
getchar();
}
return 0;
}

 

修改后的代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;


char s[16][85];
int turn,k;

void compress(char *no,int t)
{
int times[10]={0}; //记录数字出现次数
int i;
if(t<=15) //15 iterative
{
for(i=0; i<strlen(no); i++)
{
times[no[i]-'0']++;
}
k=0;
for(i=0; i<=9 ;i++)
{
if(times[i]>9)
{
int dec=times[i]/10; //十位
int sin=times[i]%10; //个位
s[t][k++]=dec+'0';
s[t][k++]=sin+'0';
s[t][k++]=i+'0';
}
else if(times[i]>0)
{
s[t][k++]=times[i]+'0';
s[t][k++]=i+'0';
}
}
s[t][k]='\0';
compress(s[t],t+1);
}
}

int main()
{
freopen("acm.txt","r",stdin);
while( scanf("%s",s[0])!=EOF && s[0][0]!='-')
{
bool flag1=false;
bool flag2=false;
bool flag3=false;
int i=0,j=0;
turn=1;

compress(s[0],turn);

if(strcmp(s[0],s[1])==0)
{
printf("%s is self-inventorying\n",s[0]);
flag1=true;
}

if(!flag1)
{
for(i=1; i<15 ; i++)
{
if(strcmp(s[i],s[i+1])==0)
{
printf("%s is self-inventorying after %d steps\n",s[0],i);
flag2=true;
break;
}
}

if(!flag2)
{

for(j=1; j<15; j++)
{
for(i=0; i<=j-2; i++)
{
if(strcmp(s[j],s[i])==0)
{
printf("%s enters an inventory loop of length %d\n",s[0],j-i);
flag3=true;
break;
}
}
if(flag3)
break;
}
}
}//if

if(!flag3 && !flag2 && !flag1)
{
printf("%s can not be classified after 15 iterations\n",s[0]);
}
getchar();
}
return 0;
}




 

posted @ 2012-03-29 23:24  Jason Damon  阅读(386)  评论(0编辑  收藏  举报