华为机试三道题(Java实现)

1、求n个整数的最大公约数,输入个数n,接着输入n个整数
例如: 输入:5 10 15 20
       输出:5
<pre name="code" class="java">import java.util.Scanner;
public class GY {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] ints = new int[n];
		for(int i = 0;i<n ;i++){
			ints[i] = sc.nextInt();
		}
		System.out.println(maxGY(ints));
	}
	private static int maxGY(int[] ints) {
		int max = 0;
		max = ints[0];
		for(int i=0;i<ints.length;i++){
			if(gongyue(max,ints[i]) < max){
				max= gongyue(max,ints[i]);
			}
		}
		return max;
	}
	public static int gongyue(int m,int n){
		if(m%n==0)
			return n;
		else
			return gongyue(n,m%n);
	}
}

 

2、数字消除,给你一个15个数字,消除连续3或者3个以上的数字例如:输入:1 1 1 2 3 4 4 4 3 3 6 7 8 9 9            输出:2 6 7 8 9 9

import java.util.Scanner;

public class XiaoChu {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] a = new int[15];
		for(int i=0;i<15;i++){
			a[i] = sc.nextInt();
		}
		int[] b = xiaochu(a);
		for(int i=0;i<b.length;i++){
			System.out.print(b[i]+" ");
		}
		
	}
	public static int[] xiaochu(int[] a){
		//定义指针和计数器
		int tmp = a[0];
		int count = 0;
		//按与数组a的对应位置,标记为true
		boolean[] flags = new boolean[a.length];
		for(int i = 0; i< flags.length;i++){
			flags[i] = true;
		}
		//是否要继续递归调用该函数,如果本次调用中,又出现了连续的,则需要递归调用
		boolean jixu = false;
		//遍历数组,将连续3个或者3个以上的字符的位置标为false
		for(int i=0; i<a.length; i++){
			if(tmp==a[i]){
				count++;
				//判断是否为最后一个字符
				if(i==a.length-1){
					if(count>=3){
						for(int j=i;j>=i-count;j--){
							flags[j] = false;
						}
						jixu = true;
					}
				}
			}else{
				if(count>=3){
					for(int j=i-1;j>=i-count;j--){
						flags[j] = false;
					}
					jixu = true;
				}
				tmp = a[i];
				count = 1;
			}
		}
		//看看有多少个幸免于难
		int youxiao = 0;
		for(int i=0;i<flags.length;i++ ){
			if(flags[i])
				youxiao++;
		}
		//复制到新数组
		int j = 0;
		int[] b = new int[youxiao];
		for(int i=0; i<a.length; i++ ){
			//把存活的数字复制到新数组
			if(flags[i]){
				b[j++] = a[i];
			}	
		}
		//要不要继续消除啊?
		if(jixu){
			return xiaochu(b);
		}
		return b;
	}
}

3、大概是找出一段文本中出现次数最多的单词和次最多的单词,用‘,’号分开表示

例如:输入:Hello world,hello world ,I am a boy in the world.

            输出:world,hello

其他的要求忘了,我实现的部分代码,只保证对唯一性的有效。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class TongJi {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		String result = find(s);
		System.out.println(result);
	}

	private static String find(String s) {
		//将字符串都变为小写,并将所有的','和'.'换成' '
		String ss = s.toLowerCase().replace(',', ' ').replace('.', ' ');
		
		//分隔字符串,得到单词的数组
		String[] strings = ss.split(" ");
		
		//定义一个HashMap并将其键初始为数组中的单词,将其值初始化为0
		Map<String,Integer> map = new HashMap<String,Integer>();
		for(String se:strings){
			map.put(se, 0);
		}
		
		//循环遍历单词数组,并将对应的map的值加1
		for(int i = 0; i < strings.length; i++){
			int value = map.get(strings[i]);
			map.put(strings[i], value+1);
		}
		
		//遍历map
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		int max = 0;
	    String maxString = "";//次数最多的单词
		while(it.hasNext()){
			String key = it.next();
			int value = map.get(key);
			if(value > max){
				max = value;
				maxString = key;
			}
		}
		//将次数最大的个数设为0
		map.put(maxString, 0);
		
		//知道次最多的那个单词
		String premaxString = "";
		it = set.iterator();
		max = 0;
		while(it.hasNext()){
			String key = it.next();
			int value = map.get(key);
			if(value > max){
				max = value;
				premaxString  = key;
			}
		}
		return maxString+","+premaxString;
	}

}



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值