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

自己用TC都调试通过了,可为什么老是WA呢?实在搞不明白,高手帮帮测试一下吧。不慎感激~~~

Posted by zhangcy at 2005-07-06 10:58:02 on Problem 1002
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct
{
	char teleNum[8];
}TeleNum;

typedef struct
{
	char teleNum[8];			     /*相同类电话号码的一个代表*/	
	int total;						 /*相同的电话号码数*/
}Result;

void quicksort(Result rt[],int low,int high)
{
	int i,j;
	char str[8];

	if(low<high)
	{
		strcpy(str,rt[low].teleNum);
		i=low;
		j=high;

		while(i<j)
		{
			while(i<j&&strcmp(rt[j].teleNum,str)>0)
				j--;
			if(i<j)
				strcpy(rt[i++].teleNum,rt[j].teleNum);
			while(i<j&&strcmp(rt[i].teleNum,str)<=0)
				i++;
			if(i<j)
				strcpy(rt[j--].teleNum,rt[i].teleNum);
		}
		strcpy(rt[i].teleNum,str);
		quicksort(rt,low,i-1);
		quicksort(rt,i+1,high);
	}
	
}

int main()
{
	unsigned long teleSum;			/*实际的电话号码数*/
	unsigned int i,j,k,m=0;			/*辅助变量*/

	/*
	//TeleNum numbers[1];				//电话号码串数组
	//Result result[1];					//标示每一组电话号码串
	//Result temp[1];					//辅助变量*/
	char c;								/*//辅助变量*/
	
	TeleNum* numbers;				/*numbers:电话号码串数组,是一个TeleNum类型的指针,也可以理解为指向TeleNum数组的首地址*/
	Result* result;					/*result:标示每一组电话号码串,是一个Result类型的指针,也可以理解为指向Result数组的首地址*/
	Result*  temp;					/*temp:辅助变量,是一个Result类型的指针,也可以理解为指向Result数组的首地址*/

	scanf("%uld",&teleSum);
	c=getchar();
	numbers=(TeleNum *)malloc(sizeof(TeleNum)*teleSum);
	result=(Result *)malloc(sizeof(Result)*teleSum);
	temp=(Result *)malloc(sizeof(Result)*teleSum);
	
	if(numbers==NULL||result==NULL||temp==NULL)
	{
		printf("Memery allocation failed!\n");
		exit(1);
	}
	
	/**
	   完成teleSum行电话号码的输入
	*/
	for(i=0;i<teleSum;i++)
	{
		for(j=0;j<7;j++) 
		{
			c=getchar();
			while(c=='-'||c=='\n')
				c=getchar();
			numbers[i].teleNum[j]=c;
		}
	    numbers[i].teleNum[j]='\0';
		
	}
	/*完成电话号码中字母到数字的转换
	*/
	for(i=0;i<teleSum;i++)
	{
		for(j=0;j<8&&numbers[i].teleNum[j]!='\0';j++) 
		{
			
			switch(numbers[i].teleNum[j])
			{
				
				case 'A':
				case 'B':
				case 'C':c='2';break;

				case 'D':
				case 'E':
				case 'F':c='3';break;

				case 'G':
				case 'H':
				case 'I':c='4';break;

				case 'J':
				case 'K':
				case 'L':c='5';break;

				case 'M':
				case 'N':
				case 'O':c='6';break;

				case 'P':
				case 'R':
				case 'S':c='7';break;

				case 'T':
				case 'U':
				case 'V':c='8';break;

				case 'W':
				case 'X':
				case 'Y':c='9';break;

				default:c=numbers[i].teleNum[j];break;
			}		
			numbers[i].teleNum[j]=c;
		}
	}


	/*比较电话号码串*/
	for(k=0,i=0;i<teleSum;i++)		
	{
		if(strcmp(numbers[i].teleNum,"null")!=0)
		{
			result[k].total=1;
			for(j=i+1;j<teleSum;j++)
			{
				if(strcmp(numbers[j].teleNum,"null")!=0)
					if(strcmp(numbers[i].teleNum,numbers[j].teleNum)==0)
					{
						strcpy(numbers[j].teleNum,"null");
						result[k].total++;
					}
			}			
			strcpy(result[k].teleNum,numbers[i].teleNum);
			k++;
			strcpy(numbers[i].teleNum,"null");
		}
	}

	/*找出总数大于1的电话号码记录,并赋值给临时变量temp*/
	for(i=0;i<k;i++)
	{
		if(result[i].total>1)
		{
			strcpy(temp[m].teleNum,result[i].teleNum);
			temp[m].total=result[i].total;
			m++;
		}
	}

	if(m==0)
	{
		printf("\nNo duplicates.");
	}
	else
	{

		for(i=0;i<m;i++)
		{
			strcpy(result[i].teleNum,temp[i].teleNum);
			result[i].total=temp[i].total;
		}
		
		/*对结果记录按照电话号码从低到高进行排序*/
		quicksort(result,0,m-1);

		printf("\n");
		for(i=0;i<m;i++)
		{
				for(j=0;j<3;j++)
					putchar(result[i].teleNum[j]);
				putchar('-');
				for(j=3;j<7;j++)
					putchar(result[i].teleNum[j]);
				putchar(' ');
				printf("%d\n",result[i].total);
		
			

		}

	}
	free(numbers);
	free(result);
	free(temp);
	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