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:1002题,求助啊In Reply To:1002题,求助啊 Posted by:025028 at 2007-03-11 12:18:54 > 各位大哥 请问http://acm.pku.edu.cn/ 上的第1002题为什么把电话号码设为long 型通不过, > 以下是从网上找的一个通过了的c++的程序 > 但当输入网页上的测试数据时输出却是: > 002-0818 2 > 002-3615 4 > -02--8329 3 > 这很明显是一个错误的结果,却能通过 > #include<stdio.h> > #include<stdlib.h> > int cmp(const void *elem1,const void *elem2) > { > return (*(int*)elem1-*(int*)elem2); > } > void main() > { > int a[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9}; > int pow[7]={1000000,100000,10000,1000,100,10,1}; > int *tels,no=1,count; > int n,i,j,s; > char raw[41],temp; > scanf("%d",&n); > tels=new int [n]; > for(i=0;i<n;i++) > { > tels[i]=0; > scanf("%s",raw); > s=0; > for(j=0;j<7;s++) > { > temp=raw[s]; > if(temp>='0'&&temp<='9') > { > tels[i]+=pow[j]*(temp-'0'); > j++; > } > else > if(temp>='A'&&temp<='Z') > { > tels[i]+=pow[j]*a[temp-'A']; > j++; > } > } > } > qsort(tels,n,sizeof(int),cmp); > for(i=0;i<n;) > { > count=0; > for(j=i+1;j<n&&tels[j]==tels[i];j++) > count++; > if(count) > { > no=0; > printf("%03d-%04d %d\n",tels[i]/10000,tels[i]%10000,++count); > } > i=j; > } > if(no) > printf("No duplicates.\n"); > } > > > > 以下是我用C写的用二叉排序树实现的程序 > 其结果能与网页上的测试数据相稳合, > 但不能通过 > > > > #include<stdio.h> > #include<stdlib.h> > int inc; > struct Node > { > long phone; > long repeat; > struct Node *left,*right; > }*Node; > void createtree(struct Node *t,long temp) > { > struct Node *s,*p; > s=t; > if(t->phone==0) > { > t->phone=temp; > t->repeat=1; > t->left=t->right=NULL; > return; > } > while(t) > { > if(temp==t->phone) {(t->repeat)++;inc=1;return;} > else if(temp>t->phone) {s=t;t=t->right;} > else {s=t;t=t->left;} > } > p=(struct Node *)malloc(sizeof(struct Node)); > p->phone=temp; > p->repeat=1; > p->left=p->right=NULL; > if(temp>s->phone) s->right=p; > else s->left=p; > } > void output(struct Node *head) > { > if(!head) return; > output(head->left); > if(head->repeat!=1) > printf("%ld-%ld %ld\n",head->phone/10000,head->phone%10000,head->repeat); > output(head->right); > } > void freeNode(struct Node *head) > { > struct Node *left,*right; > if(!head) return; > left=head->left; > right=head->right; > free((void *)head); > freeNode(left); > freeNode(right); > } > int main() > { > int a[]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0}; > long i,j,k,n; > char ch; > long temp; > struct Node *head,*p,*q,*s; > head=(struct Node *)malloc(sizeof(struct Node)); > head->left=head->right=NULL; > head->phone=0; > scanf("%ld",&n); > getchar(); > inc=0; > for(i=0;i<n;i++) > { > temp=0; > while((ch=getchar())!='\n') > { > if(ch>='A'&&ch<='Z') temp=temp*10+a[ch-65]; > else > if(ch>='0'&&ch<='9') temp=temp*10+ch-48; > } > createtree(head,temp); > } > if(inc==0) printf("No duplicates.\n"); > else > output(head); > freeNode(head); > return 0; > } > > > 而必须把我的程序改为如下才能通过,真郁闷 > #include<stdio.h> > #include<stdlib.h> > int inc; > struct Node > { > long phone; > long repeat; > struct Node *left,*right; > }*Node; > > void createtree(struct Node *t,long temp) > { > struct Node *s,*p; > s=t; > if(t->phone==0) > { > t->phone=temp; > t->repeat=1; > t->left=t->right=NULL; > return; > > } > while(t) > { > if(temp==t->phone) {(t->repeat)++;inc=1;return;} > else if(temp>t->phone) {s=t;t=t->right;} > else {s=t;t=t->left;} > } > p=(struct Node *)malloc(sizeof(struct Node)); > p->phone=temp; > p->repeat=1; > p->left=p->right=NULL; > if(temp>s->phone) s->right=p; > else s->left=p; > } > void output(struct Node *head) > { > if(!head) return; > output(head->left); > if(head->repeat!=1) > printf("%03d-%04d %ld\n",(int)(head->phone)/10000,(int)(head->phone)%10000,head->repeat); > output(head->right); > > } > void freeNode(struct Node *head) > { > struct Node *left,*right; > if(!head) return; > left=head->left; > right=head->right; > free((void *)head); > freeNode(left); > freeNode(right); > } > int main() > { > int a[]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0}; > long i,j,k,n; > char ch; > long temp; > struct Node *head,*p,*q,*s; > head=(struct Node *)malloc(sizeof(struct Node)); > head->left=head->right=NULL; > head->phone=0; > scanf("%ld",&n); > getchar(); > inc=0; > for(i=0;i<n;i++) > { > temp=0; > while((ch=getchar())!='\n') > { > if(ch>='A'&&ch<='Z') temp=temp*10+a[ch-65]; > else > if(ch>='0'&&ch<='9') temp=temp*10+ch-48; > } > createtree(head,temp); > } > > if(inc==0) printf("No duplicates.\n"); > else > output(head); > freeNode(head); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator