首页 > 代码库 > 【编程练习】电话本号码转换加排序
【编程练习】电话本号码转换加排序
功能描述: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
【编程练习】电话本号码转换加排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。