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

好奇怪!求大神指点。

Posted by cauxiaochangyi at 2011-08-06 12:42:33
//测试数据时是输出结果是正确的,但提交为何是WA呢?拜求解释。。。谢谢。。。
//C++,北大ACM—1002题;
#include<stdio.h>
#include<stdlib.h>

//错误处理函数
void Error(char*s){
	printf("%s",s);
	exit(1);
}//Error

//数据结构
//本题全部用数组来存储运算
//char s[15];                     //输入临时变量

struct LNode{
      char data[7];             //用来存储标准输出数组(如:100-2345,其中不存储‘-’)
	  int  num;                 //用于统计相同数组的个数
	  struct LNode *next;
};
typedef LNode* LinkList;

//链表初始化
void InitList(LinkList &L){
	L=(LNode*)malloc(sizeof(LNode));
	L->next=NULL;
}//InitList

//单链表销毁
void DestroyList(LinkList &L){
	LNode *q;
	q=L;
	while(q){
		L=q->next;
		free(q);
		q=L;
	}
}//DestroyList

//输入标准化函数
//将各种格式的输入数组(s[15])去除‘-’化为统一的只含数字字母的数组(StaIn[7])(如:3-10-10-10 化为 3101010)
void StandardIn(char s[],char StanIn[]){
	int i,j;
	i=0;j=0;
	for(i=0;i<20&&j<=7;i++){
		if(s[i]!='-'){
			StanIn[j]=s[i];
			j++;
		}
	}
}

//转换函数
//将标准输入数组(StanIn[])中的字母替换成数字,变成标准数组(StanIn[])
void Replace(char StanIn[]){
	int i;
	for(i=0;i<7;i++){
		if((int)StanIn[i]<58&&(int)StanIn[i]>47)continue;
		else{
			switch(StanIn[i]){
				case 'A':
				case 'B':
				case 'C':StanIn[i]='2';continue;
				case 'D':
				case 'E':
				case 'F':StanIn[i]='3';continue;
				case 'G':
				case 'H':
				case 'I':StanIn[i]='4';continue;
				case 'J':
				case 'K':
				case 'L':StanIn[i]='5';continue;
				case 'M':
				case 'N':
				case 'O':StanIn[i]='6';continue;
				case 'P':
				case 'R':
				case 'S':StanIn[i]='7';continue;
				case 'T':
				case 'U':
				case 'V':StanIn[i]='8';continue;
				case 'W':
				case 'X':
				case 'Y':StanIn[i]='9';continue;
				default: Error("Wrong Input in RP!");
			}
		}
	}
}

//比较函数
//相等返回0,s1大返回1,s2大返回-1
int Compare(char s1[],char s2[]){
	for(int i=0;i<7;i++){
		if(s1[i]>s2[i])return 1;
		else if(s1[i]<s2[i])return -1;
	}
	return 0;
}
//统计函数(核心算法)
//统计单链表(L)中相同电话号码的个数,并排序,如果L中有q相同的,那L中相应的LNode->num++,没有就升序插入L中。如果q==NULL,表示插入,否则没有
void ComputeNum(LinkList &L,LinkList &IL){
	LNode *q,*pri;
	pri=L;
	q=L->next;
	int R;

	if(q){
		R=Compare(q->data,IL->data);
		if(R==1){          //q->data > IL->data
			pri->next=IL;
		    IL->next=q;
		    IL=NULL;
		}
		else if(R==0){     //q->data == IL->data
			q->num=q->num+1;
		}
		else{                                       //q->data < IL->data
			ComputeNum(q,IL);
		}
	}
	else{                                           //当q为空时
		pri->next=IL;
		IL->next=q;
		IL=NULL;
	}
}

//输出函数
//按给定的格式将统计结果(L)输出
void Output(LinkList &L){
	LNode *q;
	q=L->next;
	int i;
	bool flg=false;

	while(q){
		if(q->num>1){
			flg=true;
			for(i=0;i<7;i++){
				if(i==3)printf("-");
				printf("%c",q->data[i]);
			}
			printf(" %d\n",q->num);
		}
		q=q->next;
	}
	if(!flg)printf("No duplicates.\n");
}

int main(){
	char s[20];
	int n,i;
	LinkList L,q;
	InitList(L);
	q=NULL;

	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%s",s);

		if(q==NULL){
		q=(LNode*)malloc(sizeof(LNode));
		q->num=1;
		}
	
		StandardIn(s,q->data);
		Replace(q->data);
		ComputeNum(L,q);
	}
	Output(L);
	DestroyList(L);
	free(q);
	//exit(1);
return 1;
}

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