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;
}
相關文章
- 2017java筆試題及答案Java筆試
- java筆試題Java筆試
- 2017華為筆試題3筆試
- 2017華為筆試題2筆試
- 常見Java問題及筆試題(十七)——阿里2017實習生研發題Java筆試阿里
- java基礎筆試題Java筆試
- 幾道Java筆試題Java筆試
- JAVA面試題 手寫ArrayList的實現,在筆試中過關斬將?Java面試題筆試
- 微信LazyMan筆試題的深入解析和實現筆試
- Java筆試題怎麼做Java筆試
- 2017 年軟體實施工程師筆試面試題及答案工程師筆試面試題
- java執行緒的筆試題Java執行緒筆試
- java面試筆試題大彙總Java面試筆試
- 微軟暑期實習筆試題微軟筆試
- 2017騰訊Web前端實習生招聘筆試題總結Web前端筆試
- java面試筆試試題http://www.jobui.com/mianshiti/it/java/6827/Java面試筆試HTTPUI
- Android面試之Java基礎筆試題Android面試Java筆試
- 2017阿里,百度,京東java面試+筆試大合集,這些面試題你都會嗎?阿里Java筆試面試題
- Java筆試面試Java筆試面試
- 熬夜整理2021最新Java高階筆試題,現在做Java開發有前途嗎Java筆試
- 出現頻率最高的筆試題 (轉)筆試
- 筆試題目——研發工程師筆試題筆試工程師
- 騰訊實習筆試題--簡單計算器程式的c語言實現筆試C語言
- Java程式設計師的筆試題10道Java程式設計師筆試
- 騰訊筆試題筆試
- shell 筆試題筆試
- SQL 筆試題SQL筆試
- 最新Python筆試題2017 涵蓋知識面廣泛Python筆試
- Java實現Kafka讀寫筆記JavaKafka筆記
- Java筆試經驗Java筆試
- .NET出現頻率非常高的筆試題筆試
- 測試筆試多選題筆試
- 軟體測試筆試題筆試
- 【Java】留下沒有基礎眼淚的面試題,java初級面試筆試題Java面試題筆試
- 精選乾貨:Java精選筆試題附答案Java筆試
- 中軟國際Java程式設計師筆試題Java程式設計師筆試
- 一道筆試題:利用JS程式碼實現防抖和節流筆試JS
- 騰訊筆試題集筆試