PKU OJ 1002(487-3279)电话号码解题方法与个人最简短代码
来源:互联网 发布:网络层的数据帧结构 编辑:程序博客网 时间:2024/04/28 02:23
以前一次偶然的机会听说了最短代码竞赛,这两天不想干啥事,便开始做一做OJ吧,
题目见这里:http://poj.org/problem?id=1002
主要是一个字符串读取与转换,我的实现代码代码长度为651字节,39行。
#include <stdio.h>#include <map>typedef long D;typedef std::map<D,D> M;char mC[]="2223334445556667777888999";int main(int argc, char **argv){D n,t;M m;scanf("%d\n",&n);for(;n!=0;n--){char s[64],c;gets(s);t=0;for(D i=0;s[i]!='\0';i++){c=s[i];if(c>='0'&&c<='9')t=10*t+c-'0';if(c>='A'&&c<'Z'&&c!='Q')t=10*t+mC[c-'A']-'0';}m[t]++;}M::iterator it=m.begin(),iE=m.end();while(it!=iE){if(it->second>1){n++;printf("%03d-%04d %d\n",it->first/10000,it->first%10000,it->second);}it++;}if(!n)printf("No duplicates.\n");return 0;}
讲解一下上述代码利用了以下几个C++的语法特性:
(1)map类,可以对每个标准电话号码进行快速的统计和计数,插入新的数据非常方便。
(2)m[t]++; 这个语句详细的解释可以参看《C++ Primer》中关于map类模版的介绍。
如果t不在map中,则新增一个元素,m[t]的值会初始化为0,然后进行一个自增操作,即计数值为1。
否则,m[t]的值由原来的值加1。
(3)typedef定义,主要是减少一点代码长度;
(4)OJ需要注意的问题,刚开始没有注意可能没有重复项目,中间又因为没考虑Q会出现在测试数据中所以一直错误。
最后附图代码长度与状态:
2013-7-29更新:
最后也顺便附上一个C语言版本,和上面的类似,代码也更加简短了,537字,效率也相对更高,不过内存使用有点多了(C++也可以不用map类进行一样的改写):
#include <stdio.h>typedef long D;#define z 10000000D m[z]={0};char mC[]="2223334445556667777888999";int main(){D n,t,i;scanf("%d\n",&n);for(;n!=0;n--){char s[64],c;gets(s);t=0;for(i=0;s[i]!='\0';i++){c=s[i];if(c>='0'&&c<='9')t=10*t+c-'0';if(c>='A'&&c<'Z'&&c!='Q')t=10*t+mC[c-'A']-'0';}m[t]++;}for(i=0;i<z;i++){if(m[i]>1){n++;printf("%03d-%04d %d\n",i/10000,i%10000,m[i]);}}if(!n)puts("No duplicates.");return 0;}代码长度与运行结果如下,运行时间还是会受到一些非稳定因素的干扰的。有时候时间短一点~~
- PKU OJ 1002(487-3279)电话号码解题方法与个人最简短代码
- pku oj 1002 487-3279
- 487-3279(北大OJ核对电话号码)
- pku 1002 解题报告
- 代码最简短的 delphi 程序
- 最简短的文件拷贝C++代码
- LeetCode ::Merge Sorted Array[最简短代码]
- 网页插入FLASH代码,最简短
- 最简短的js焦点图代码
- 数据结构与算法B代码编写作业,电话号码,解题报告&AC代码
- js Array(数组)操作的最简短最容易理解方法
- 解题报告之代码 pku 1789
- js Array操作的最简短最容易理解方法
- Pku acm 1002 487-3279 排序算法解题报告(一) ----二叉查找数(BST)
- POJ 1002求487-3279解题报告——【PKU ACM】
- 487-3279 - PKU 1002
- 487-3279 - PKU 1002
- PKU 1002 487-3279
- UILable实现按照文字多少定义大小
- log4j 配置示例(将log写入文件)log4j 1.2.16
- std::string
- 广告弹窗
- jquery阻止事件冒泡
- PKU OJ 1002(487-3279)电话号码解题方法与个人最简短代码
- 快速排序(1)
- FDT 使用flex sdk4.6 出现的一个问题
- 套接字API(九)inet_pton函数和inet_ntop函数
- 71道经典Android面试题和答案,重要知识点都包含了
- 文件读取和显示(readTextFile.py)
- Visual.Assist.X.V10.7.1949的汉化破解补丁
- Struts2.x+JFreeChart搭建框架出错(一)
- Linux/UNIX脚本编程学习笔记(0728)