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

求助 answer wrong~~~~~~~~

Posted by sardine at 2010-07-05 18:48:37 on Problem 1002
我的源代码,初学者,C语言

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 20

void del(char*);
void change(char*);
void add(char*);
char *book(int);
int *Count(int);
void up(char*,int);
void RepeatTimes(char*,int*,int);

void main()
{
	int n,i,*count;
	char *p;

	scanf("%d",&n);
	getchar();


	p=book(n);
	count=Count(n);

	for(i=0;i<n;i++)count[i]=0; /*令计数器数组初始化为0*/

	if(p==NULL)
	{
		printf("内存不足!");
		exit(0);
	}
	else
	{
		for(i=0;i<n;i++)
		{
			gets(&p[i*LEN]);
			del(&p[i*LEN]);
			change(&p[i*LEN]);
			add(&p[i*LEN]);
		
		}

		up(p,n);
		RepeatTimes(p,count,n);
		
	}
		for(i=0;i<n;i++)
		{
			if(count[i]>1)
			{
				printf("%s ",&p[i*LEN]);
				printf("%d\n",count[i]);
			}
		}
			

	
}
/*函数功能:删除连接符"-"*/
void del(char *a)
{
	int i=0,j=0;
	for (;a[i]!=0;i++)
	{
		if(a[i]!='-')
		{
			a[j]=a[i];
			j++;
		}
	}
	a[j]=0;
}
/*函数功能:申请一个长度n行LEN宽的动态字符二维数组。
返回数组首(类型为char*)地址。用于存放电话号码*/
char *book(int n)
{
	char *p=NULL;
	
	if(n<=0||n>=100000)
	{
		printf("输入错误!");
		exit(0);
	}
	
	return (char*)calloc(n*LEN,sizeof(char));
}
/*函数功能:申请一个长度为n的动态一维数组作为计数器。
返回数组首地址(类型int*).*/
int *Count(int n)
{
	return (int*)calloc(n,sizeof(int));
}
/*函数功能:将输入的电话号码中的英文字母转换成对应
的数字(字符型)。*/
void change(char *b)
{
	int i;
	for(i=0;b[i];i++)
	{
		if(b[i]>=65&&b[i]<=67)b[i]='2';
		if(b[i]>=68&&b[i]<=70)b[i]='3';
		if(b[i]>=71&&b[i]<=73)b[i]='4';
		if(b[i]>=74&&b[i]<=76)b[i]='5';
		if(b[i]>=77&&b[i]<=79)b[i]='6';
		if(b[i]=='P'||b[i]=='S'||b[i]=='R')b[i]='7';
		if(b[i]>=84&&b[i]<=86)b[i]='8';
		if(b[i]>=87&&b[i]<=89)b[i]='9';
	}
}
/*函数功能:在指定的第4位添加连接符"-"*/
void add(char *c)
{
	int i;
	for(i=7;i>=3;i--)
		c[i+1]=c[i];

	c[3]='-';

}
/*函数功能:对存放电话号码的数组执行升序排列操作*/
void up(char *d,int n)
{
	int i,j;
	char temp[LEN];
	for(i=0;i<n;i++)
	{
		for(j=i;j<n;j++)
		{
			if(strcmp(&d[i*LEN],&d[(j+1)*LEN])>0)
			{
				strcpy(temp,&d[i*LEN]);
				strcpy(&d[i*LEN],&d[(j+1)*LEN]);
				strcpy(&d[(j+1)*LEN],temp);
			}
		}
	}
}
/*函数功能:计算的出电话号码的重复次数,存放于对应的计数器数组元素中*/
void RepeatTimes(char *book,int count[],int n)
{
	int i,j,flag;

	for(i=0;i<n;i++)
	{
		flag=1;/*设置标志位,记1为无重复*/
		for(j=0;j<i;j++)
		{
			if(!strcmp(&book[j*LEN],&book[i*LEN]))
			{
				count[j]++;
				flag=0;
				break;
			}
		}
		if(flag)count[i]++;
	}
}

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