| ||||||||||
| 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