| ||||||||||
| 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 | |||||||||
好奇怪!求大神指点。//测试数据时是输出结果是正确的,但提交为何是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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator