网易2017校园招聘数据挖掘笔试题

时间:2022-07-22 18:50:15

题目一:藏宝图

-------------------------------------------------------------------------------------------------------------------------------------------------------------

牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t,

根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字符串中是连续的,例如串 abc,

它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

输入描述:每个输入包含一个测试用例。每个测试用例包含两行长度不超过 10 的不包含空格的可见 ASCII 字符串。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

输出描述:输出一行 “Yes” 或者 “No” 表示结果。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

示例1

输入:

x.nowcoder.com

ooo

输出:

yes

-----------------------------------------------------------------------------------------------------------------------------------------------------------

正确的代码:

网易2017校园招聘数据挖掘笔试题网易2017校园招聘数据挖掘笔试题
package problem1;
import java.util.*;

/**
* Created by Administrator on 2017/9/8.
*/
public class CaoBaoTu_Right {

public static final void main(String[] args){
Scanner scan
=new Scanner(System.in);
while(scan.hasNext()){
String str1
=scan.nextLine();
String str2
=scan.nextLine();
boolean result=isContain(str1,str2);
if(result){
System.out.println(
"Yes");
}
else{
System.out.println(
"No");
}
}
scan.close();
}

public static boolean isContain(String str1,String str2){
for(int i=0,index=0;i<str1.length();i++){
if(str1.charAt(i)==str2.charAt(index)){
index
++;
if(index==str2.length()){
return true;
}
}
}
return false;
}


}
View Code

自己写的代码:

网易2017校园招聘数据挖掘笔试题网易2017校园招聘数据挖掘笔试题
package problem1;

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

/**
*
http://blog.csdn.net/a819825294/article/details/52098020
牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串s和t,根据古老的传说,牛牛需要每次都回答t是否是s的子序列。注意,子序列不要求在原字符串中是连续的,例如串abc,它的子串序列就有{空串,a,b,c,ab,ac,bc,abc}8种。
*/
public class CangBaoTu {
public static void main(String[] args) {

Scanner in
= new Scanner(System.in);

//两字符串输入
String s1 = in.nextLine();
//System.out.println("s1:"+s1);
String s2 = in.nextLine();
// System.out.println("s2:"+s2);

//创建两个HashMap集合,存放字符串
HashMap<Character, Integer> hashMap1 = new HashMap<Character, Integer>();
HashMap
<Character, Integer> hashMap2 = new HashMap<Character, Integer>();

//统计字符串s1的频率
for (char c1 : s1.toCharArray()) {
if (hashMap1.containsKey(c1)) {
hashMap1.put(c1, hashMap1.get(c1)
+ 1);
}
else {
hashMap1.put(c1,
1);
}
}

//统计字符串s2的频率
for (char c2 : s2.toCharArray()) {
if (hashMap2.containsKey(c2)) {
hashMap2.put(c2, hashMap2.get(c2)
+ 1);
}
else {
hashMap2.put(c2,
1);
}
}

//判断是否包含
Set<Map.Entry<Character, Integer>> set1 = hashMap1.entrySet();

/*for (Map.Entry<Character, Integer> entry1 : set1) {
Character key1=entry1.getKey();
Integer value1=entry1.getValue();
System.out.println(key1+" "+value1);
}
*/



Set
<Map.Entry<Character, Integer>> set2 = hashMap2.entrySet();
/*
for (Map.Entry<Character, Integer> entry2 : set2) {
Character key2=entry2.getKey();
Integer value2=entry2.getValue();
System.out.println(key2+" "+value2);
}
*/

String flag
="No";
for (Map.Entry<Character, Integer> entry1 : set1) {
for (Map.Entry<Character, Integer> entry2 : set2) {
if (entry1.getKey().equals(entry2.getKey()) && (entry1
.getValue()
== entry2.getValue())) {
flag
="Yes";
}
}
}

System.out.println(flag);
}
}
View Code

 

题目二:下厨房

 -------------------------------------------------------------------------------------------------------------------------------------------------    

 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

 ------------------------------------------------------------------------------------------------------------------------------------------------

输入描述:

每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。

-----------------------------------------------------------------------------------------------------------------------------------------------

输出描述:

输出一行一个数字表示完成所有料理需要多少种不同的材料。

--------------------------------------------------------------------------------------------------------------------------------------------

输入

BUTTER FLOUR HONEY FLOUR EGG

输出

4

--------------------------------------------------------------------------------------------------------------------------------------------

网易2017校园招聘数据挖掘笔试题网易2017校园招聘数据挖掘笔试题
package problems;

import java.util.HashSet;
import java.util.Scanner;


/**
* 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
*
* 测试用例
* BUTTER FLOUR
HONEY FLOUR EGG
输出:4
*/
public class LiaoLi {
public static void main(String[] args) {
Scanner in
= new Scanner(System.in);
HashSet
<String> hashSet = new HashSet<String>();

while (in.hasNext()) {
String str
=in.nextLine();
String[] arr
=str.trim().split(" ");
for(int i=0;i<arr.length;i++){
hashSet.add(arr[i]);
}
}
System.out.println(hashSet.size());
hashSet.clear();
}
}
View Code

 ------------------------------------------------------------------------------------------------------------------------------------------

题目三:

 ------------------------------------------------------------------------------------------------------------------------------------------

n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。

 ------------------------------------------------------------------------------------------------------------------------------------------

输入描述:

每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。

 ------------------------------------------------------------------------------------------------------------------------------------------

输出描述:

 ------------------------------------------------------------------------------------------------------------------------------------------

输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1

------------------------------------------------------------------------------------------------------------------------------------------

示例1

输入

4

7 15 9 5

输出

3

 ------------------------------------------------------------------------------------------------------------------------------------------

网易2017校园招聘数据挖掘笔试题网易2017校园招聘数据挖掘笔试题
package problem5;

import java.util.Scanner;

/**
* n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
*/
public class FeiApple {
public static void main(String[] args) {
Scanner scanner
= new Scanner(System.in);
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
int[] num = new int[n];
for (int i = 0; i < n; i++) {
num[i]
= scanner.nextInt();
}
System.out.println(avg(num));
}
}

public static int avg(int[] num) {
int average = 0;
int sum = 0;
int len = num.length;
for (int i = 0; i < len; i++) {
sum
+= num[i];
}
average
= sum / len;
if (sum % len != 0) {
return -1;
}
for (int i = 0; i < len; i++) {
int t = Math.abs((num[i] - average));
if (t % 2 != 0)
return -1;
}
int index = 0;
for (int i = 0; i < len; i++) {
if (num[i] > average)
index
+= (Math.abs(num[i] - average) / 2);
}
return index;
}
}
View Code