1.結果填空 (滿分2分)
2.結果填空 (滿分6分)
3.結果填空 (滿分7分)
4.代碼填空 (滿分4分)
5.代碼填空 (滿分12分)
6.結果填空 (滿分12分)
7.結果填空 (滿分9分)
8.程式設計(滿分8分)
9.程式設計(滿分17分)
10.程式設計(滿分23分)
1.标題:猜年齡
小明帶兩個妹妹參加元宵燈會。别人問她們多大了,她們調皮地說:“我們倆的年齡之積是年齡之和的6倍”。小明又補充說:“她們可不是雙胞胎,年齡差肯定也不超過8歲啊。”
請你寫出:小明的較小的妹妹的年齡。
注意: 隻寫一個人的年齡數字,請通過浏覽器送出答案。不要書寫任何多餘的内容。
2.标題:李白打酒
話說大詩人李白,一生好飲。幸好他從不開車。
一天,他提着酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱:
無事街上走,提壺去打酒。
逢店加一倍,遇花喝一鬥。
這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。
請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。
注意:通過浏覽器送出答案。答案是個整數。不要書寫任何多餘的内容。
3.标題:神奇算式
由4個不同的數字,組成的一個乘法算式,它們的乘積仍然由這4個數字組成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果滿足乘法交換律的算式算作同一種情況,那麼,包含上邊已列出的3種情況,一共有多少種滿足要求的算式。
請填寫該數字,通過浏覽器送出答案,不要填寫多餘内容(例如:列出所有算式)。
4.标題:寫日志
寫日志是程式的常見任務。現在要求在 t1.log, t2.log, t3.log 三個檔案間輪流寫入日志。也就是說第一次寫入t1.log,第二次寫入t2.log,... 第四次仍然寫入t1.log,如此反複。
下面的代碼模拟了這種輪流寫入不同日志檔案的邏輯。
public class A
{
private static int n = 1;
public static void write(String msg)
{
String filename = "t" + n + ".log";
n = ____________;
System.out.println("write to file: " + filename + " " + msg);
}
}
請填寫劃線部分缺失的代碼。通過浏覽器送出答案。
注意:不要填寫題面已有的内容,也不要填寫任何說明、解釋文字。
5.标題:錦标賽
如果要在n個資料中挑選出第一大和第二大的資料(要求輸出資料所在位置和值),使用什麼方法比較的次數最少?我們可以從體育錦标賽中受到啟發。
如圖【1.png】所示,8個選手的錦标賽,先兩兩捉對比拼,淘汰一半。優勝者再兩兩比拼...直到決出第一名。
第一名輸出後,隻要對黃色标示的位置重新比賽即可。
下面的代碼實作了這個算法(假設資料中沒有相同值)。
代碼中需要用一個數組來表示圖中的樹(注意,這是個滿二叉樹, 不足需要補齊)。它不是存儲資料本身,而是存儲了資料的下标。
第一個資料輸出後,它所在的位置被辨別為-1
class A{
//a 表示待處理的資料,長度如果不是2的次幂,則不足位置補為-1
static void pick(int[] a)
{
int n = 1;
while(n<a.length) n *= 2;
int[] b = new int[2*n-1];
for(int i=0; i<n; i++){
if(i<a.length)
b[n-1+i] = i;
else
b[n-1+i] = -1;
}
//從最後一個向前處理
for(int i=b.length-1; i>0; i-=2){
if(b[i]<0){
if(b[i-1]>=0)
b[(i-1)/2] = b[i-1];
else
b[(i-1)/2] = -1;
}
else{
if(a[b[i]]>a[b[i-1]])
b[(i-1)/2] = b[i];
else
b[(i-1)/2] = b[i-1];
}
}
//輸出樹根
System.out.println(b[0] + ": " + a[b[0]]);
//值等于根元素的位置需要重新pk
pk(a,b,0,b[0]);
//再次輸出樹根
System.out.println(b[0] + ": " + a[b[0]]);
}
// a 表示待處理資料,b 二叉樹,k 目前要重新比拼的位置,v 已經決勝出的值
static void pk(int[] a, int[] b, int k, int v)
{
int k1 = k*2+1;
int k2 = k1 + 1;
if(k1>=b.length || k2>=b.length){
b[k] = -1;
return;
}
if(b[k1]==v)
pk(a,b,k1,v);
else
pk(a,b,k2,v);
//重新比較
if(b[k1]<0){
if(b[k2]>=0)
b[k] = b[k2];
else
b[k] = -1;
return;
}
if(b[k2]<0){
if(b[k1]>=0)
b[k] = b[k1];
else
b[k] = -1;
return;
}
if(__________________________) //填空
b[k] = b[k1];
else
b[k] = b[k2];
}
}
請仔細分析流程,填寫缺失的代碼。
通過浏覽器送出答案,隻填寫缺失的代碼,不要填寫已有代碼或其它說明語句等。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31EeFpXT1MGVNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zROBlL4ATO2QzNykTM4IjMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
6.标題:六角填數
如圖【1.png】所示六角形中,填入1~12的數字。
使得每條直線上的數字之和都相同。
圖中,已經替你填好了3個數字,請你計算星号位置所代表的數字是多少?
請通過浏覽器送出答案,不要填寫多餘的内容。
7.标題:繩圈
今有 100 根繩子,當然會有 200 個繩頭。
如果任意取繩頭兩兩配對,把所有繩頭都打結連接配接起來。最後會形成若幹個繩圈(不考慮是否套在一起)。
我們的問題是:請計算最後将形成多少個繩圈的機率最大?
注意:結果是一個整數,請通過浏覽器送出該數字。不要填寫多餘的内容。
8.标題:蘭頓螞蟻
蘭頓螞蟻,是于1986年,由克裡斯·蘭頓提出來的,屬于細胞自動機的一種。
平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一隻“螞蟻”。
螞蟻的頭部朝向為:上下左右其中一方。
螞蟻的移動規則十分簡單:
若螞蟻在黑格,右轉90度,将該格改為白格,并向前移一格;
若螞蟻在白格,左轉90度,将該格改為黑格,并向前移一格。
規則雖然簡單,螞蟻的行為卻十分複雜。剛剛開始時留下的路線都會有接近對稱,像是會重複,但不論起始狀态如何,螞蟻經過漫長的混亂活動後,會開辟出一條規則的“高速公路”。
螞蟻的路線是很難事先預測的。
你的任務是根據初始狀态,用計算機模拟蘭頓螞蟻在第n步行走後所處的位置。
【資料格式】
輸入資料的第一行是 m n 兩個整數(3 < m, n < 100),表示正方形格子的行數和列數。
接下來是 m 行資料。
每行資料為 n 個被空格分開的數字。0 表示白格,1 表示黑格。
接下來是一行資料:x y s k, 其中x y為整數,表示螞蟻所在行号和列号(行号從上到下增長,列号從左到右增長,都是從0開始編号)。s 是一個大寫字母,表示螞蟻頭的朝向,我們約定:上下左右分别用:UDLR表示。k 表示螞蟻走的步數。
輸出資料為兩個空格分開的整數 p q, 分别表示螞蟻在k步後,所處格子的行号和列号。
例如, 輸入:
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
程式應該輸出:
1 3
再例如, 輸入:
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
程式應該輸出:
0 0
資源約定:
峰值記憶體消耗(含虛拟機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。
所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
9.标題:斐波那契
斐波那契數列大家都非常熟悉。它的定義是:
f(x) = 1 .... (x=1,2)
f(x) = f(x-1) + f(x-2) .... (x>2)
對于給定的整數 n 和 m,我們希望求出:
f(1) + f(2) + ... + f(n) 的值。但這個值可能非常大,是以我們把它對 f(m) 取模。
公式參見【圖1.png】
但這個數字依然很大,是以需要再對 p 求模。
【資料格式】
輸入為一行用空格分開的整數 n m p (0 < n, m, p < 10^18)
輸出為1個整數
例如,如果輸入:
2 3 5
程式應該輸出:
再例如,輸入:
15 11 29
程式應該輸出:
25
資源約定:
峰值記憶體消耗(含虛拟機) < 256M
CPU消耗 < 2000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。
所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
10.标題:波動數列
觀察這個數列:
1 3 0 2 -1 1 -2 ...
這個數列中後一項總是比前一項增加2或者減少3。
棟棟對這種數列很好奇,他想知道長度為 n 和為 s 而且後一項總是比前一項增加a或者減少b的整數數列可能有多少種呢?
【資料格式】
輸入的第一行包含四個整數 n s a b,含義如前面說述。
輸出一行,包含一個整數,表示滿足條件的方案數。由于這個數很大,請輸出方案數除以100000007的餘數。
例如,輸入:
4 10 2 3
程式應該輸出:
2
【樣例說明】
這兩個數列分别是2 4 1 3和7 4 1 -2。
【資料規模與約定】
對于10%的資料,1<=n<=5,0<=s<=5,1<=a,b<=5;
對于30%的資料,1<=n<=30,0<=s<=30,1<=a,b<=30;
對于50%的資料,1<=n<=50,0<=s<=50,1<=a,b<=50;
對于70%的資料,1<=n<=100,0<=s<=500,1<=a, b<=50;
對于100%的資料,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a, b<=1,000,000。
資源約定:
峰值記憶體消耗(含虛拟機) < 256M
CPU消耗 < 2000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。
所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。