英文字母(除Q和Z外)和电话号码存在着对应关系,如下所示:
A,B,C -> 2
D,E,F -> 3
G,H,I -> 4
J,K,L -> 5
M,N,O -> 6
P,R,S -> 7
T,U,V -> 8
W,X,Y -> 9
标准的电话号码格式是xxx-xxxx,其中x表示0-9中的一个数字。有时为了方便记忆电话号码,我们会将电话号码的数字转变为英文字母,如把263-7422记成America。有时,我们还加上“-”作为分隔符,如把449-6753记成Hi-World。当然,我们未必要将所有的数字都转变为字母,比如474-6635可以记成iPhone-5。
总之,一个方便记忆的电话号码由数字和除Q、Z外的英文字母组成,并且可以在任意位置插入任意多的“-”符号。
现在 ,我们有一个列表,记录着许多方便记忆的电话号码。不同的方便记忆的电话号码可能对应相同的标准号码,你的任务就是找出它们。
其后n行,每行是一个方便记忆的电话号码,它由数字和除Q、Z外的英文字母、“-”符号组成,其中数字和字母的总数一定为7,字符串总长度不超过200。
如果没有重复出现的标准电话号码,则输出一行“No duplicates.”。
12 4873279 ITS-EASY 888-4567 3-10-10-10 888-GLOP TUT-GLOP 967-11-11 310-GINO F101010 888-1200 -4-8-7-3-2-7-9- 487-3279
310-1010 2 487-3279 4 888-4567 3
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std ; int cmp(const void* a,const void* b) { return *(int*)a - *(int*)b ; } int main() { char T[27] = "2223334445556667-77888999-" ; int N ; cin>>N ; getchar() ; int *a = new int[N+1] ; int i = 0; char c ; for(;i<N;i++){ a[i]= 0 ; while((c=getchar())!='\n') { if(c>='A'&&c<='Z') c=T[c-'A'] ; if('-'!=c) a[i]=a[i]*10+c-'0' ; } } qsort(a,i,sizeof(int),cmp) ; int k = 1 ,n=0; for(i=0;i<=N;i++) { if(a[i]==a[i+1]) k++ ; else if(k>=2){ int b = a[i]/10000 ; int d = a[i]%10000 ; // cout<<b<<'-'<<d<<" "<<k<<endl ; printf("%03i-%04i %i\n",b,d,k); k=1; n++ ; } } if(0==n) printf("No duplicates.\n"); return 0 ; }1.用字符数组存储需要转变的值
2.然后剔除里面的其他无用字符,用一个新字符串保存
3.把字母转化为数字保存,然后把新字符串转为为一个int型
保存在数组中,然后由小到大排序,输出时把数拆开,加个'-',变成字符串再输出
import java.util.Arrays; import java.util.Scanner; /** * acm1002 * @author tanlvxu * */ public class Main{ /** * @param args */ public static void main(String[] args) { Scanner sc = new Scanner(System.in) ; int n = sc.nextInt() ; int a[] = new int[n] ; String str[] = new String[n] ; char T[] = {'2','2','2','3','3','3','4','4','4','5','5','5','6', '6','6','7','-','7','7','8','8','8','9','9','9','-'} ; for(int i=0;i<n;i++) { str[i] = sc.next(); char c ; String s1 = "" ; for(int j=0;j<str[i].length();j++) { if(str[i].charAt(j)>='A' && str[i].charAt(j)<='Z') { c = T[str[i].charAt(j)-'A'] ; s1 = s1+c ; }else if(str[i].charAt(j)>='0'&&str[i].charAt(j)<='9') { s1 += str[i].charAt(j) ; } } //System.out.println(s1) ; a[i] = Integer.parseInt(s1) ; } Arrays.sort(a) ; int k=1,l=0 ; for(int i=0;i<n-1;i++) { if(a[i]==a[i+1]) { k++; } else if(k>=2) { int b=a[i]/10000,d=a[i]%10000 ; System.out.printf("%03d-%04d %d\n",b,d,k); k=1 ; l++ ; } } if(0==l) System.out.println("No duplicates.") ; } }
或者:
package dsa ; import java.util.Arrays; import java.util.Scanner; /** * acm1002 * @author tanlvxu * */ public class Demo6{ /** * @param args */ public static void main(String[] args) { ui(); } public static void ui() { Scanner sc = new Scanner(System.in) ; int n = sc.nextInt() ; String str[] = new String[n] ; for(int i=0;i<n;i++) { str[i] = process(sc.next()); } Arrays.sort(str) ; int k=1,l=0 ; for(int i=0;i<n-1;i++) { if(str[i].equals(str[i+1])) { k++; } else if(k>=2) { String b = str[i].substring(0,3); String d = str[i].substring(3); System.out.print(b+"-"+d+" ") ; System.out.println(k) ; k=1 ; l++ ; } } if(0==l) System.out.println("No duplicates.") ; } public static String process(String str1) { int c ; String s1 = "" ; for(int j=0;j<str1.length();j++) { if(str1.charAt(j)>='A' && str1.charAt(j)<'Q') { c = str1.charAt(j)-'A' ; c = c/3 + 2 ; s1 = s1+c ; }else if(str1.charAt(j)>'Q' && str1.charAt(j)<'Z') { c = str1.charAt(j)-'A' +2; c = c/3 + 1 ; s1 = s1+c ; } else if(str1.charAt(j)>='0'&&str1.charAt(j)<='9') { s1 += str1.charAt(j) ; } } return s1 ; } }
解决方案3:哈希解法
package dsa; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Scanner; /** * acm1002 * @author tanlvxu * */ public class Demo6{ /** * @param args */ public static void main(String[] args) { //定义一个哈希表 Map<String,Integer> map = new HashMap<String,Integer>(); Scanner sc = new Scanner(System.in) ; int n = sc.nextInt() ; for(int i=0;i<n;i++) { String tempString = sc.next() ; tempString = process(tempString) ; String tempString1 = tempString.substring(0, 3) ; String tempString2 = tempString.substring(3) ; tempString = tempString1 + "-" + tempString2 ; //判断表是否包含了该元素 if(map.containsKey(tempString)){ //如果包含该元素,就把原来的表中元素移除掉,value + 1 Object object = map.get(tempString) ; int value = Integer.parseInt(object.toString()) ; value += 1 ; map.remove(value) ; map.put(tempString, Integer.parseInt(value+"")); }else { //如果不存在该元素,就直接添加 map.put(tempString,Integer.parseInt("1")) ; } } //创建迭代器 Iterator it = map.entrySet().iterator() ; List<String> list = new ArrayList<String>() ; while(it.hasNext())//如果仍有元素可以迭代,则返回 true。 { //得到映射项 Map.Entry entry = (Map.Entry) it.next() ; //返回迭代的下一个元素。 Object key = entry.getKey() ; Object value = entry.getValue() ; int p = Integer.parseInt(value.toString()) ; //如果存在重复的元素,则添加到list表中 if(p>1){ list.add(key +" "+value) ; } } Collections.sort(list) ;//对list进行排序 if(list.size() == 0) { System.out.println("No duplicates."); }else{ for (int l = 0; l < list.size(); l++) { System.out.println(list.get(l)); } } } public static String process(String str) { String tempString = "" ; for(int i=0;i<str.length();i++) { char te = str.charAt(i) ; if(te>='0'&&te<='9'){ tempString = tempString + te ; }else if(te>='A' && te<'Q'){ int temp = te - 'A' ; temp = temp/3 + 2 ; tempString = tempString + temp ; }else if(te>'Q' && te<'Z'){ int temp = te - 'A' + 2; temp = temp/3 + 1; tempString = tempString + temp ; } } return tempString ; } }
相关推荐
ta_lib-0.5.1-cp312-cp312-win32.whl
课程设计 在线实时的斗兽棋游戏,时间赶,粗暴的使用jQuery + websoket 实现实时H5对战游戏 + java.zip课程设计
ta_lib-0.5.1-cp310-cp310-win_amd64.whl
基于springboot+vue物流系统源码数据库文档.zip
GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载
知识图谱
333498005787635解决keil下载失败的文件.zip
【微信机器人原理与实现】 微信机器人是通过模拟微信客户端的行为,自动处理消息、发送消息的程序。在Python中实现微信机器人的主要库是WeChatBot,它提供了丰富的接口,允许开发者方便地进行微信消息的接收与发送。这个项目标题中的"基于python实现的微信机器人源码"指的是使用Python编程语言编写的微信机器人程序。 1. **Python基础**:Python是一种高级编程语言,以其简洁的语法和强大的功能深受开发者喜爱。在实现微信机器人时,你需要熟悉Python的基本语法、数据类型、函数、类以及异常处理等概念。 2. **微信API与WeChatBot库**:微信为开发者提供了微信公共平台和微信开放平台,可以获取到必要的API来实现机器人功能。WeChatBot库是Python中一个用于微信开发的第三方库,它封装了微信的API,简化了消息处理的流程。使用WeChatBot,开发者可以快速搭建起一个微信机器人。 3. **微信OAuth2.0授权**:为了能够接入微信,首先需要通过OAuth2.0协议获取用户的授权。用户授权后,机器人可以获取到微信用户的身份信息,从而进行
基于springboot实验室研究生信息管理系统源码数据库文档.zip
张力控制,色标跟踪,多轴同步,电子凸轮,横切等工艺控制案例。
在Python编程环境中,处理Microsoft Word文档是一项常见的任务。Python提供了几个库来实现这一目标,如`python-docx`,它可以让我们创建、修改和操作.docx文件。本教程将重点介绍如何利用Python进行Word文档的合并、格式转换以及转换为PDF。 1. **合并Word文档(merge4docx)** 合并多个Word文档是一项实用的功能,特别是在处理大量报告或文档集合时。在Python中,可以使用`python-docx`库实现。我们需要导入`docx`模块,然后读取每个文档并将其内容插入到主文档中。以下是一个基本示例: ```python from docx import Document def merge4docx(file_list, output_file): main_doc = Document() for file in file_list: doc = Document(file) for paragraph in doc.paragraphs: main_doc.add_paragraph(paragraph.text) m
基于springboot+Javaweb的二手图书交易系统源码数据库文档.zip
基于springboot餐品美食论坛源码数据库文档.zip
基于springboot亚运会志愿者管理系统源码数据库文档.zip
使用WPF的数据样式绑定,切换对象数据值来完成控件动态切换背景渐变动画效果。 使用动画样式渲染比线程修改性能消耗更低更稳定
基于SpringBoot的企业客源关系管理系统源码数据库文档.zip
基于springboot+vue的桂林旅游网站系统源码数据库文档.zip
基于springboot嗨玩旅游网站源码数据库文档.zip
基于springboot的流浪动物管理系统源码数据库文档.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip