2017搜狐筆試題(Java實現)
一、生成Kolakoski序列
1.1 題目描述:
Kolakoski序列是個自主生成的無限序列。
例如,當給定的整陣列為[1, 2]時,Kolakoski序列是這樣的:
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, …]
如果我們將相鄰的相同的數字分成一組,那麼將會得到:
[[1], [2, 2], [1, 1], [2], [1], [2, 2], [1], [2, 2], [1, 1], [2], [1, 1], [2, 2], [1], [2], [1, 1], [2], [1], [2, 2], [1, 1],…]
可以看出,每組數字交替由1, 2組成。
接下來對每個分組求他的長度,得到:
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, …]
可以看出,經過如上的變換後,數列保持不變。
對於其他給定的整陣列,同樣可以用類似的方法構造Kolakoski序列,例如給定整陣列[2, 3]時:
[2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3,…]
給定整陣列[2, 1, 3, 1]時,構造得到如下:
[2, 2, 1, 1, 3, 1, 2, 2, 2, 1, 3, 3, 1, 1, 2, 2, 1, 3, 3, 3, 1, 1, 1, 2, 1, 3, 3, 1, 1,…]
1.2 輸入描述:
輸入由兩行組成:
第一行包括兩個正整數n, m
第二行包括m個正整數a[]
資料規模與限制:
0<n<10000
1<m<1000
0<a[i]<1000
a[i]不等於a[i+1]
a[0]不等於a[m-1]
1.3 輸出描述:
每行一個數字,共n行
整陣列a生成的Kolakoski序列的前n項
1.4 示例1:
輸入:
30 4
2 1 3 1
輸出:(此處為了書寫方便採用逗號分隔)
2, 2, 1, 1, 3, 1, 2, 2, 2, 1, 3, 3, 1, 1, 2, 2, 1, 3, 3, 3, 1, 1, 1, 2, 1, 3, 3, 1, 1, 2,
1.2 程式碼實現
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[] a = new int[m];
for (int i = 0; i < a.length; i++) {
a[i] = scanner.nextInt();
}
scanner.close();
printList(a, n);
}
public static void printList(int[] a, int n) {
int[] result = new int[n];
int c = 0;
if (a[0] == 1) {
result[0] = a[0];
result[1] = a[1];
} else {
result[0] = a[0];
result[1] = a[0];
}
for (int i = 0, top = 0; top < n; i++) {
int num = a[c++];
if (c == a.length) {
c = 0;
}
for (int j2 = 0; j2 < result[i] && top < n; j2++) {
result[top++] = num;
}
}
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
二、裝箱問題
2.1 問題
一個工廠製造的產品形狀都是長方體盒子,它們的高度都是 h,長和寬都相等,一共有六個型號,分別為1*1, 2*2, 3*3, 4*4, 5*5, 6*6。
這些產品通常使用一個 6*6*h 的長方體箱子包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的箱子數量BoxNum.
【思路】:先裝大的,再裝小的。
2.2 程式碼實現
public static void solve2() {
Scanner scanner = new Scanner(System.in);
List<String> list = new ArrayList<>();
String end = "0 0 0 0 0 0";
while (scanner.hasNext()) {
String string = scanner.nextLine();
list.add(string);
if (string.equals(end)) {
break;
}
}
scanner.close();
for (int i = 0; i < list.size() - 1; i++) {
String string = list.get(i);
long result = caculate(string);
if (i == list.size() - 1) {
System.out.print(result);
} else {
System.out.println(result);
}
}
}
public static int caculate(String string) {
String[] arr = string.split(" ");
int[] a = new int[arr.length+1];
for (int i = 1; i < arr.length+1; i++) {
a[i] = Integer.parseInt(arr[i-1]);
}
int[] num2 = {0,5,3,1};//6*6的大箱子,放入i個3*3小箱子之後,還能放入num2[i]個小箱子
int result = a[6]+a[5]+a[4];//6*6和5*5和4*4一定是一個佔一個箱子,而3*3 是4個佔一個箱子
int n2 = a[4]*5+num2[a[3]%4];
if(a[2]>n2){
result += (a[2]-n2+8)/9;//如果前面剩餘的空間還不夠放2*2,求出多需要幾個2*2的空間,+8是為了向上取整,
}
int n1 = 36*(result-a[6])-a[5]*5*5-a[4]*4*4-a[3]*3*3-a[2]*2*2;
if(a[1]>n1){
result += (a[1]-n1+35)/36;
}
return result;
}
相關文章
- 2017 年軟體實施工程師筆試面試題及答案工程師筆試面試題
- 2017騰訊Web前端實習生招聘筆試題總結Web前端筆試
- JAVA面試題 手寫ArrayList的實現,在筆試中過關斬將?Java面試題筆試
- Java筆試題怎麼做Java筆試
- Java面試寶典-2017Java面試
- Android面試之Java基礎筆試題Android面試Java筆試
- java執行緒的筆試題Java執行緒筆試
- 劍指offer面試題(41-50)——java實現面試題Java
- 熬夜整理2021最新Java高階筆試題,現在做Java開發有前途嗎Java筆試
- 【Java】留下沒有基礎眼淚的面試題,java初級面試筆試題Java面試題筆試
- Java面試題 從原始碼角度分析HashSet實現原理?Java面試題原始碼
- java基礎面試題題庫一(傳智專修學院2017級Java4班)Java面試題
- 如何準備Java的高階技術面試,java基礎面試筆試題Java面試筆試
- java筆試錯題記錄——2020-10-13Java筆試
- 2017前端實習生面試總結前端面試
- 搜狐iOS崗面試iOS面試
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 2017年前端面試題整理彙總100題前端面試題
- Python 筆試 面試題Python筆試面試題
- 漢羅塔問題 java實現Java
- 精選乾貨:Java精選筆試題附答案Java筆試
- 每日一道java筆試題 2020-9-23Java筆試
- 一道筆試題:利用JS程式碼實現防抖和節流筆試JS
- java面試一日一題:mysql事務是如何實現的Java面試MySql
- 前端筆試題面試題記錄前端筆試面試題
- Java筆試經驗Java筆試
- ACCPS2-03使用java實現資料庫程式設計考試試題參照Java資料庫程式設計
- 2017筆記——Spotlight筆記
- (轉)2017年前端面試題整理彙總100題前端面試題
- pytorch實現 | Deformable Convolutional Networks | CVPR | 2017PyTorchORM
- 測試筆試多選題筆試
- 一道阿里java多執行緒面試題的go版本實現阿里Java執行緒面試題Go
- 前端筆試題面試題記錄(下)前端筆試面試題
- IT公司筆試題(四)筆試
- 面試題隨筆面試題
- c++筆試題C++筆試
- php筆試題gtalentPHP筆試
- Linux-筆試題Linux筆試
- 面試題 LazyMan 的Rxjs實現方式面試題JS