华为2014年7月7号下午3点30机试题-JAVA

华为2014年7月7号下午3点30机试题-JAVA

初级题

求两个数的最小公倍数。
输入:2 3
输出:6

import java.util.Scanner;

public class Question1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int a = scanner.nextInt();
		int b = scanner.nextInt();
		System.out.println(minCommonMultiple(a,b));
	}

	private static int minCommonMultiple(int a, int b) {
		// TODO Auto-generated method stub
		int orgA = a;
		int orgB = b;
		int temp;
		temp = a%b;
		while(temp != 0){
			a = b;
			b = temp;
			temp = a%b;
		}
		return orgA*orgB/b;
	}

}

中级题

中国有句俗语叫“三天打鱼两天晒网”,给定起始日期为1990年1月1号,输入终止日期,计算终止日期是在打渔还是晒网,打渔输出Fishing,晒网输出Netting。
输入:1990 01 04
输出:Netting

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

public class Question2 {
	
	/**
	 * @param args
	 * @throws ParseException 
	 */
	public static void main(String[] args) throws ParseException {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String time = scanner.nextLine();
		String doing = getDoing(time);
		System.out.println(doing);
	}

	private static String getDoing(String time) throws ParseException{
		// TODO Auto-generated method stub
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd");
		Calendar cld = Calendar.getInstance();
		cld.setTime(sdf.parse(time));
		long end = cld.getTimeInMillis();
		cld.setTime(sdf.parse("1990 01 01"));
		long start = cld.getTimeInMillis();
		long days = (end-start)/(1000*3600*24);
		days = days%5;
		if(days == 3 || days == 4){
			return "netting";
		}
		return "fishing";
	}

}

高级题

公司设备管理系统,某公司有许多员工和设备,每个员工有一个8位数字组成的ID,每台设备有个小于等于20位由数字和字母组成的设备号。
每个员工可以拥有多台设备,但是每台设备只能分配给一个员工使用。

输入四个数a,b,c,d
a:给这个系统添加多少台设备
b:从这个系统中删除多少台设备
c:添加设备和员工的对应关系
d:删除设备和员工的对应关系
之后是由这4个参数控制的输入序列
a行设备编号,若添加失败则输出"add computers error:"+设备号;成功不输出
b行删除设备的编号,若删除失败则输出"remove computers error:"+设备号;成功不输出
c行要分配给员工的设备,若添加失败则输出“assign computer error:”+设备号+“_”+员工号;成功不输出
d行要删除分配给员工的设备,若删除失败则输出"remover computer from worker error:"+设备号+“_”+员工号;成功不输出

最后要求输出总共的设备数目和排序输出员工和设备的对应关系(员工号+"_"+设备号)(先按照员工号进行排序,若员工有多台设备,则再按照设备号进行排序)。

如输入
3 2 2 1
SN001
SN002
SN003
SN003
SN004
SN002 12345678
SN001 12345678
SN001 12345678

输出:
remove computers error:SN004
1
12345678_SN002

import java.util.*;

public class Question3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int a = 3, b = 2, c = 2, d = 1;
		//所有设备
		Set<String> computers = new TreeSet<String>();
		//所有员工
		Set<String> workers = new TreeSet<String>();
		//所有分配给员工的设备
		Set<String> result = new TreeSet<String>();
		//已经分配的设备
		Set<String> hasAssignComp = new TreeSet<String>();
		//如果设备集合当中不存在该设备添加设备
		for(int i = 0; i < a; i++){
			String comp = scanner.nextLine();
			if(!computers.add(comp)){
				System.out.println("add computers error:"+comp);
			}
		}
		//如果设备集合当中存在该设备删除该设备
		for(int i = 0; i < b; i++){
			String comp = scanner.nextLine();
			if(!computers.contains(comp)){
				System.out.println("remove computers error:"+comp);
				continue;
			}
			computers.remove(comp);
		}
		//如果设备集合中存在设备并且已分配的设备集合中不存在该设备
		//则添加该设备
		for(int i = 0; i < c; i++){
			String input = scanner.nextLine();
			String[] re = input.split(" ");
			if(!computers.contains(re[0])||hasAssignComp.contains(re[0])){
				System.out.println("assign computer error:"+re[0]+"_"+re[1]);
				continue;
			}
			result.add(re[1]+"_"+re[0]);
			workers.add(re[1]);
			hasAssignComp.add(re[0]);	
			
		}
		//如果已分配的设备集合中存在该设备,则从已分配集合中删除该设备
		//设备总集合当中不删除该设备
		for(int i = 0; i < d; i++){
			String input = scanner.nextLine();
			String[] re = input.split(" ");
			if(!hasAssignComp.contains(re[0])||!result.contains(re[1]+"_"+re[0])){
				System.out.println("remover computer from worker error:"+re[0]+"_"+re[1]);
				continue;
			}
			result.remove(re[1]+"_"+re[0]);
			hasAssignComp.remove(re[0]);	
		}
		//输出总共有多少台设备
		System.out.println(computers.size());
		//排序输出员工和分配给该员工的设备
		Iterator<String> iter = result.iterator();
		while(iter.hasNext()){
			System.out.println(iter.next());
		}
	}

}

以上代码仅供参考 ,欢迎大家多多指正。如果有更好的方法,希望大家给出更好解法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值