首页 > 代码库 > 【编程练习】电话本号码转换加排序

【编程练习】电话本号码转换加排序

功能描述:http://poj.org/problem?id=1002

解决关键:

1)使用数值数组代替二维数组——数组角标表示排序的号码,元素的值记录出现的次数;利用数值的天然大小顺序直接按顺序记录标准化后的号码。

2)至于格式问题,不一定拘泥于将格式写入字符串,直接控制格式化字符串。

PS.因为号码不会变化且唯一,所以可以这样使用——如果用出现次数(变化的量)排序就不这么方便了。

技术分享



#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int simplify(char *a){//将名称化的电话号码标准化
	int iLen=strlen(a);
	int i=0;
	char b;//存储标准变化
	int res=0;

	for(i=0;i<iLen;i++){//判断这个字符应该转换成什么
		if(a[i]>=‘A‘&&a[i]<‘Q‘){//字母
			b=(a[i]-‘A‘)/3+‘2‘;
			res=res*10+b-‘0‘;
		}
		else if(a[i]>‘Q‘&&a[i]<‘Z‘){			
			b=(a[i]-‘A‘-1)/3+‘2‘;
			res=res*10+b-‘0‘;
		}

		else if(a[i]>=‘0‘&&a[i]<=‘9‘){
			b=a[i];
			res=res*10+b-‘0‘;
		}
	}
	return res;
}
int arr[10000000] = {0};//用来记录标准化后的号码的出现次数——利用1-1000000本身的顺序
int main(){
	int iNum,i,j,iLen=0;
	char szInput[100]={0};
	int value=http://www.mamicode.com/0;"\n====================\n");
	scanf("%d",&iNum);

	for(i=0;i<iNum;i++){
		scanf("%s",szInput);

		value=http://www.mamicode.com/simplify(szInput);//标准化"%03d-%04d %d\n",i/10000,i%10000,arr[i]);
			flag=1;
		}
	}
	if (!flag)
	{
		printf("No duplicates.\n");
	}

	//main();
	return 0;
}


本文出自 “12746634” 博客,请务必保留此出处http://12756634.blog.51cto.com/12746634/1910291

【编程练习】电话本号码转换加排序