1. 程式人生 > >華為機試程式設計題(二)

華為機試程式設計題(二)

       華為機試程式設計題分享又來啦。本次的部分題目也比較簡單,參考程式碼就不給大家了,留給大家自由發揮的餘地嘍。好了,廢話不多說,下面就進入正題嘍。

1、質數因子

題目描述

功能:輸入一個正整數,按照從小到大的順序輸出它的所有質數的因子(如180的質數因子為2 2 3 3 5 ),最後一個數後面也要有空格

輸入描述:

輸入一個long型整數

輸出描述:

按照從小到大的順序輸出它的所有質數的因子,以空格隔開。最後一個數後面也要有空格。

相信大家對於這個題目是很熟悉的,在C語言學習階段就遇到過求解某一個數的所有質數因子,那麼就可以按照當時的思路進行程式碼編寫了,屬於容易題,小編就不在這裡給出參考程式碼了。

2、合併表記錄

題目描述

資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。

輸入描述:

先輸入鍵值對的個數,然後輸入成對的index和value值,以空格隔開

輸出描述:

輸出合併後的鍵值對(多行)

    對於本題,相信熟悉Java語言的小夥伴很容易想到使用一個HashMap來儲存,而且HashMap的查詢效率是很高的。參考程式碼如下,如果有更好地實現方法,可以給小編私信或評論哦。

package HUAWEI;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class MergeKeyValue {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt();
		Map<Integer, Integer> map = new HashMap<>();
		
		int i = 0;
		while(i < num) {
			++i;
			int key = scanner.nextInt();
			int value = scanner.nextInt();
			if(!map.keySet().contains(key)) {
				map.put(key, value);
			} else {
				map.put(key, map.get(key)+value);
			}
		}
		List<Integer> list = new ArrayList<>();
		for(Integer integer : map.keySet()) {
			list.add(integer);
		}
		Collections.sort(list);
		for(Integer integer : list) {
			System.out.println(integer + " " + map.get(integer));
		}
		
		scanner.close();
	}
}

3、提取不重複的整數

題目描述

輸入一個int型整數,按照從右向左的閱讀順序,返回一個不含重複數字的新的整數。

輸入描述:

輸入一個int型整數

輸出描述:

按照從右向左的閱讀順序,返回一個不含重複數字的新的整數

本題可以將int的整數轉換為字串進行處理,字串提供了擷取字串、包含等方法可以很好的幫助我們處理問題。

package HUAWEI;

import java.util.Scanner;

public class ReturnANewInteger {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int input = scanner.nextInt();
		String string = String.valueOf(input);
		StringBuffer buffer = new StringBuffer();
		for(int i = string.length()-1; i >= 0; i--) {
			String s = String.valueOf(string.charAt(i));
			if(!buffer.toString().contains(s)) {
				buffer.append(s);
			}
		}
		System.out.println(buffer.toString());
		
		scanner.close();
	}
}

4、字元統計個數

題目描述

編寫一個函式,計算字串中含有的不同字元的個數。字元在ACSII碼範圍內(0~127)。不在範圍內的不作統計。

輸入描述:

輸入N個字元,字元在ACSII碼範圍內。

輸出描述:

輸出範圍在(0~127)字元的個數。

需要注意本題統計的字元在ASCII碼範圍0~127內,則我們可以準備一個128個元素的陣列來統計他們出現的次數。

package HUAWEI;

import java.util.Scanner;

public class HowManyASCII {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		String input = scanner.next();
		int[] array = new int[128];
		int count = 0;
		for(int i = 0; i < input.length(); i++) {
			++array[input.charAt(i)];
		}
		for(int i = 0; i < array.length; i++) {
			if(array[i] != 0) {
				++count;
			}
		}
		System.out.println(count);
		
		scanner.close();
	}
}

       本篇又分享了4個較為容易的華為機試題目,希望大家可以給出更好的解決方法,來私信小編。華為的機試題目的前兩道題目,還都是比較容易的,是大家主要拿分的點。