poj 1002 487-3279(参考YSQ)
来源:互联网 发布:程序员能自学吗 编辑:程序博客网 时间:2024/05/01 06:14
题意:
输入n个字符串,每个字符串出去‘-’外只有7个字符,每个英文字母都有对应映射,请将输入字符串中标准电话号码出现次数大于1的输出
**Q与Z不会出现,so无map
于是构建映射^_^用map
首先解释公式 >o<:
x=x*10+(c-‘A’-(c>’Q’))/3+2
(c>’Q’)返回的是bool值1或0,于是如果输入字母为Q之后的字母向前移一位。
(c-‘A’-(c>’Q’))/3为什么要除以3呢(⊙o⊙)?
因为题目中三个字母对应一个映射
(c-‘A’-(c>’Q’))/3+2
为什么要+2呢 >o<
因为映射第一个数字是2
#include<cstdio>#include<map>using namespace std;map <int,int> s;int main(){ int n; scanf("%d",&n); char c; //映射构建 for(int i=1;i<=n;i++){//n个字符串 int x=0;//x代表电话号码 for(int cnt=1;cnt<=7;){//每个字符串只有7个字符 scanf("%c",&c); if(c>='A'&&c<='Z'){//如果输入的是字母,进行转换 x=x*10+(c-'A'-(c>'Q'))/3+2;//(c>'Q)返回的是bool(1or0) cnt++; } else if(c>='0'&&c<='9'){ x=x*10+c-'0'; cnt++; } } s[x]++;//电话号码对应映射+1 } bool visi=false; for(map<int,int>::iterator it=s.begin();it!=s.end();++it){//你写it++也无所谓啦 if(it->second>1){ printf("%03d-%04d %d\n",it->first/10000,it->first%10000,it->second); //%03d代表输出三个整数,不够补0 visi=true; } } if(visi==false) printf("No duplicates.\n"); return 0;}
1 0
- poj 1002 487-3279(参考YSQ)
- 未优化的dijsktra(参考YSQ)
- POJ--1002 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- poj 1002 "487-3279"
- POJ 1002 487-3279
- poj 1002 487-3279
- poj 1002 487-3279
- POJ-1002 487-3279
- poj 1002 487-3279
- POJ 1002 487-3279
- poj 1002 487-3279
- (POJ 1002) 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- [POJ]1002 487-3279
- poj 3159 Candies (spfa+stack)
- PHP Object Injection(PHP对象注入)
- [扫描线 计算几何] BZOJ 1845 [Cqoi2005] 三角形面积并
- 【hibernate】配置文件与映射文件
- 2015 房子距离
- poj 1002 487-3279(参考YSQ)
- android dispatchTouchEvent方法查找包含点击坐标的view;
- Android小程序-标准体重计算器
- 还是畅通工程
- 有关统计二进制中1的个数的奇妙代码
- 条理清晰的搭建SSH环境之添加所需jar包
- HashMap扩容机制、线程安全
- 使用Java查询MongoDB数据库并封装成查询服务实践
- 实习每天总结 第一天