北大在线测试系统(POJ)第1002题
2018-02-04 21:05
183 查看
原题请参考:http://poj.org/problem?id=1002
这个题目我写了好几个版本的C程序,虽然都Accepted,但普遍用时较多,还需要进一步优化。下面这个程序是其中的一个,本来是想空间换时间,结果发现用时也超过了700MS。基本思想是:开辟一个大数组,数组元素的下标对应电话号码、元素值为该号码出现的次数。每读一个号码,号码对应的元素值加1。最后依次输出元素值大于1的数组下标(即电话号码)。
这个题目我写了好几个版本的C程序,虽然都Accepted,但普遍用时较多,还需要进一步优化。下面这个程序是其中的一个,本来是想空间换时间,结果发现用时也超过了700MS。基本思想是:开辟一个大数组,数组元素的下标对应电话号码、元素值为该号码出现的次数。每读一个号码,号码对应的元素值加1。最后依次输出元素值大于1的数组下标(即电话号码)。
#include "stdio.h" #include "stdlib.h" #include "string.h" int duplicateCount = 0; int main() { int i,j; int num; char map[25]= {'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'}; char temp; char phoneNum[8]; int int_phoneNum; int *count; int duplicateFlag = 0; count = (int *)malloc(10000000*sizeof(int)); memset(count,0,10000000*sizeof(int)); scanf("%d%c",&num,&temp); for(i=0;i<num;i++) { j=0; temp = getchar(); while(temp!='\n'&& temp!=EOF) { if(temp!='-') { if(temp>='A'&& temp<='Z') phoneNum[j] = map[temp-65]; else phoneNum[j] = temp; j++; } temp = getchar(); } int_phoneNum = atoi(phoneNum); count[int_phoneNum]++; if(count[int_phoneNum]==2) duplicateCount++; } for(i=0;i<10000000;i++) { if(count[i]>1) { duplicateFlag = 1; duplicateCount--; printf("%03d",i/10000); printf("-%04d",i%10000); if(duplicateCount) printf(" %d\n",count[i]); else { printf(" %d",count[i]); break; } } } if(duplicateFlag==0) printf("No duplicates."); }
相关文章推荐
- WDM系统测试及仪表
- 相关驱动开发工具(系统自带测试驱动工具使用 学习学习)
- 实战安全十大***测试演练系统
- 基于Web的系统测试与传统的软件测试
- 【备忘】基于Web的系统测试方法
- 用Bootchart测试你的ubuntu Linux 系统启动时间
- 如何做好系统测试
- QNX系统的实时性分析-实时性能测试标准
- 如何测试遗留系统?
- 【科研论文】某雷达自动测试系统研制–基于全硬件TCP/IP协议栈芯片W5300
- 机房收费系统测试计划文档
- 系统内置的四种网络测试工具
- poj 1811 Prime Test【 随机素数测试与大数分解】
- 解决Xcode 9.3系统真机测试时出现 could not find developer disk image问题
- 呼叫中心系统的测试文档源码
- 在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
- “ 第一次亲密接触”—系统测试
- 解决Xcode 9.2系统真机测试时出现 could not find developer disk image问题
- 对目前系统测试的几个看法
- POJ - 3622/USACO - Dec07 Gold Gourmet Grazers 挑剔的美食家 重庆一中高2018级竞赛班第五次测试 2016.7.26 Problem 4