`

1002

阅读更多
总时间限制:
2000ms
内存限制:
65536kB
描述
英文字母(除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(n <= 100000),表示列表中的电话号码数。
其后n行,每行是一个方便记忆的电话号码,它由数字和除Q、Z外的英文字母、“-”符号组成,其中数字和字母的总数一定为7,字符串总长度不超过200。
输出
输出包括若干行,每行包括一个标准电话号码(xxx-xxxx)以及它重复出现的次数k(k >= 2),中间用空格分隔。输出的标准电话号码需按照升序排序。

如果没有重复出现的标准电话号码,则输出一行“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 
 
解决方案一:G++
 
#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.用一个int型数组存储电话数
    3。对int型数组进行判断再输出
 
 
 
 
解决方案二:Java
 
 解决思路:
 
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 ;
	}
}

     

 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics