| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:谁有更多的测试案例啊.谢谢.In Reply To:谁有更多的测试案例啊.谢谢. Posted by:llyans at 2012-04-11 12:09:49 现在可以ac了..
只是把从当前数字得到下一数字的过程改了下.
原来是得到字符串,从小到大排序,然后从头遍历字符串.当当前字符与保存的上一个
字符不同时,输出字符串,因为已经排序,所以输出就是x0x1x2x3等等.
这种方法一直wa.
换成不排序字符串,把字符的值作为数组索引来保存这个字符出现的次数.
用这种方法就ac了..但是我认为第一种方法是可以的..多次测试都没有问题,不过用
第一种方法会慢一些..但为什么oj给出wa真心不知道..哪位能给提示一下?感谢.
#define MAX 100
#define TOINT(x) (x-48) \
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void deal_input(char*s);
int charcmp(const void*a,const void*b);
int main(void)
{
char input[MAX];
while(1){
memset(input,0,sizeof(input));
scanf("%s",input);
if(strcmp(input,"-1")==0)
break;
deal_input(input);
}
return 0;
}
int charcmp(const void*a,const void*b)
{
return*(char*)a> *(char*)b;
}
void deal_input(char*s)
{
char ori[MAX];
char pre[MAX];
char now[MAX];
char rec[16][MAX];
int ncnt[10];
int l;
int i,j;
memset(ori,0,sizeof(ori));
strcpy(ori,s);
memset(rec,0,sizeof(rec));
strcpy(rec[0],ori);
for(i= 1;i<=15;i++){
memset(now,0,sizeof(now));
memset(pre,0,sizeof(pre));
strcpy(pre,rec[i-1]);
l= strlen(pre);
memset(ncnt,0,sizeof(ncnt));
for(j= 0;j<l;j++){
ncnt[TOINT(pre[j])]++;
}
for(j= 0;j<10;j++){
if(ncnt[j]!=0)
sprintf(now+strlen(now),"%d%d",ncnt[j],j);
}
strcpy(rec[i],now);
if(strcmp(now,rec[i-1])==0){
if(i==1)
printf("%s is self-inventorying\n",s);
else
printf("%s is self-inventorying after %d steps\n",s,i-1);
return;
}
for(j= i-2;j>=0;j--){
if(strcmp(now,rec[j])==0){
printf("%s enters an inventory loop of length %d\n",s,i-j);
return;
}
}
}
printf("%s can not be classified after 15 iterations\n",s);
return;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator