首页 > 试题广场 >

找“异数”

[编程题]找“异数”
  • 热度指数:4048 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
定义:数值序列中包含2~16进制整数,如果序列中有一个数,与序列中其他任何一个数大小都不相等,则这个数叫做“异数”。请找出给定数值序列中所有的“异数”.

输入描述:
输入数值序列i行(0<i),每一行分别是进制和数值,以“#”分割。如:n#m, n是整数,代表n进制(1<n<17),m是n进制下的数值.
输入序列以结束符”END”结束。
m的字符集为0-9和A-F,保证数值在十进制下不超过1e9,行数不超过100001行。


输出描述:
输出j行(0<j<=i),每一行都是输入序列的“异数”。要求:
1.按照输入序列的原序输出;
2.如果没有”异数”,输出字符串”None”
3.结束符“END”不用输出
示例1

输入

10#15
4#32
4#33
8#17
END

输出

4#32
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        Map<Integer,Integer> map=new LinkedHashMap<>();
        Map<Integer,String> map1=new HashMap<>();
        while(sc.hasNext()){
            String s=sc.next();
            int flag=0;
            if(s.equals("END")){
                for(int key:map.keySet()){
                    if(map.get(key)==1){
                        flag=1;
                        System.out.println(map1.get(key));
                    }
                }
                if(flag==0)
                    System.out.println("None");
                break;
            }
            String[] strs=s.split("#");
            int n=Integer.parseInt(strs[0]);
            int num=Integer.parseInt(strs[1],n);
            if(map.containsKey(num)){
                map.put(num,2);
            }else{
                 map.put(num,1);
                map1.put(num,s);
            }
        }
        sc.close();
    }
}

发表于 2021-03-16 21:36:57 回复(0)
//package com.mingzhouL.exer;

/**
 * @author LMZ
 * @create 2020-05-14-11:21
 */

/*
思路:写一个方法,用于将任意进制转为十进制
主函数中,读入一个进制数就放到方法里面求结果
给出三个list分别存储输入序列、当前序列对应的十进制数、所有异数
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        int temp = Integer.MAX_VALUE;//用于记录相同的数值
        ArrayList<String> as = new ArrayList<String>();//存储输入的序列
        ArrayList<Integer> ai = new ArrayList<Integer>();//用于记录当前序列的十进制数
        ArrayList<Integer> ad = new ArrayList<Integer>();//用于记录异数
        while(!(str = br.readLine()).equals("END")){
            as.add(str);
            String[] nowstr = str.split("#");
            int n = Integer.parseInt(nowstr[0]);
            int num = xToten(n,nowstr[1]);
            ai.add(num);
            if(ad.contains(num)){
                temp = num;
                ad.remove(new Integer(num));
            }
            else
                ad.add(num);
        }
        ad.remove(new Integer(temp));//防止还有一个相同数被添加
        for(int i = 0;i<ad.size();i++){
            int index = ai.indexOf(ad.get(i));
            System.out.println(as.get(index));
        }
    }

    public static int xToten(int n,String str){
        if(n==10)return Integer.parseInt(str);
        char[] ch = str.toCharArray();
        int sum = 0;
        for(int i = ch.length - 1,j=0;i>=0;i--){
            if(ch[i]>='0'&&ch[i]<='9')
                sum+=(ch[i]-'0')*(int)Math.pow(n,j++);
            else
                sum+=(ch[i]-'A'+10)*(int)Math.pow(n,j++);
        }
        //System.out.println(sum);
        return sum;
    }
}
有没有大神指点一下,为啥我这个只能通过13.3%呢?
编辑于 2020-05-15 11:19:48 回复(0)
          



import java.util.*;

public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<Integer,String> map = new HashMap<>();
Listset = new ArrayList<>();
Listlist = new ArrayList<>();
//int[] nums={};
int count = 0;
while(sc.hasNext()){
String s =sc.next();
if("END".equals(s)){
break;
}

        String[] split = s.split("#");
        Integer num1 = Integer.valueOf(split[0]);
        int temp = Integer.parseInt(split[1], num1);
        if(list.isEmpty()||!list.contains(temp)){
            list.add(temp);
            map.put(temp,s);
            set.add(temp);
        }else{
            if(set.contains(temp)){
                set.remove((Object)temp);
            }
        }
    }
    if(set.size()==0){
        System.out.println("None");
    }else{
        for (Integer temp1 :
                set) {
            System.out.println(map.get(temp1));
        }
    }

}

}

编辑于 2019-07-31 10:35:23 回复(0)