Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

测试数据都是对的,但是提交wa了,求解释,有注释的代码贴上

Posted by denganliang at 2011-03-29 17:13:42 on Problem 1035
#include <stdio.h>
#include <string.h>
//看是否b是a的字串的函数
int testdel(char a[18],char b[18]){
	int i,j,k,lena,lenb;
	char temp[18];

	lena=strlen(a);
	lenb=strlen(b);//其实lena=lenb+1;
	for(i=0;i<lena;i++){
		k=0;
		memset(temp,'\0',18);
		for(j=0;j<lena;j++){
			if(i!=j)
               temp[k++]=a[j];
			}
		 if(strcmp(temp,b)==0) return 1;
		
		}
	  return 0;
	}
//看是否a和b只有一位不同的函数
int testchg(char a[18],char b[18]){
	int lena,i,count=0;
	lena=strlen(a);
	for(i=0;i<lena;i++)
	if(a[i]!=b[i]) count++;
	return count;
	}


int main(){
  char s[17][10010][18],ch[18],r[10000][18],temp[18];
  int  key[18]={0};
  int len,k=0,i,j,t,m[10000]={0},flag;
  memset(s,'\0',3063060);
  while(1){
	  scanf("%s",ch);
	  if(ch[0]=='#')
	  break;
	  len=strlen(ch);
	  strcpy(s[len][key[len]++],ch);
	  s[len][key[len]-1][17]=k++;
	  }
   while(1){
	   scanf("%s",ch);
	   len=strlen(ch);
	   if(ch[0]=='#') 
	   break;
	   if(key[len]>0){
		   flag=0;
		   for(i=0;i<key[len];i++)
		     if(strcmp(s[len][i],ch)==0)
		      {
				  flag=1;
				  printf("%s is correct\n",ch);
				  break;//找到了
				  }
		  if(flag==1) continue;
		   }
	   t=0;
	   if(len>1&&key[len-1]>=1)
	   for(i=0;i<key[len-1];i++){
		   if(testdel(ch,s[len-1][i])==1){//看看是不是输入的字串,如果是就可以删除一个成为正常的
		       m[t]=s[len-1][i][17];//记录这个本来的顺序
			   strcpy(r[t++],s[len-1][i]);
			   }
		   }
	   if(key[len]>0)
	   for(i=0;i<key[len];i++)
	   {
		   if(testchg(ch,s[len][i])==1){//看看是不是只有一位不同,如果是,就可以改正
		       m[t]=s[len][i][17];//记录这个本来的顺序
			   strcpy(r[t++],s[len][i]);
			   }
		   }
	   if((len+1<=15)&&key[len+1]>0)
	   for(i=0;i<key[len+1];i++){
		   if(testdel(s[len+1][i],ch)==1){//看看输入的是不是它的字串,如果是就可以增加一个成为正常的
		       m[t]=s[len+1][i][17];//记录这个本来的顺序
			   strcpy(r[t++],s[len+1][i]);
			   }
		   
		   }
	   //根据顺序对m进行排序,并且输出就可以了
	   if(t==0) printf("%s:\n",ch);
	   else {
		   printf("%s:",ch);
		   for(i=0;i<t;i++){
		     for(j=i;j<t;j++){
				 if(m[i]>m[j])
				 {
					 m[i]=m[j]+m[i];
					 m[j]=m[i]-m[j];
					 m[i]=m[i]-m[j];
					 strcpy(temp,r[i]);
					 strcpy(r[i],r[j]);
					 strcpy(r[j],temp);
					 }
				 }
				printf(" %s",r[i]);
				 }
		   printf("\n");
		   }
	   }
  
  return 0;
  }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator