1 數(shù)組轉(zhuǎn)置
編寫程序?qū)?行3列的數(shù)組行列置換復(fù)制給3行2列的數(shù)組(即數(shù)組的轉(zhuǎn)置)。已經(jīng)寫了如下代碼,請(qǐng)完善之:
class y{
public static void main(String[] args) throws Exception {
int a[][]={{1,2,3},{4,5,6}};
int b[][]=new int[3][2];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
_____________________;
}
}
}
}
b[j][i] = a[i][j]
2 文件管理
顯示“DaSai”目錄下以”Ex”開頭的文件和目錄,寫了如下代碼,請(qǐng)完善之:
import java.io.*;
class JavaFilter implements FilenameFilter{
String jf;
JavaFilter(String s){
jf=s;
}
//實(shí)現(xiàn)FilenameFilter接口的accept()方法
public boolean accept(File dir,String name){
return name.startsWith(jf);//name的前綴是否是參數(shù)jf
}
}
public class Ex{
public static void main(String[] args) throws Exception {
File f=new File("/DaSai");
//過濾以“Ex”開頭的文件和目錄,存放到字符串?dāng)?shù)組s中。
String s[]=____________________________;
for(int i=0;i<s.length;i++){
File ff=new File(s[i]);// 根據(jù)s[i]創(chuàng)建File類對(duì)象
if(ff.isDirectory())
System.out.println(s[i]+" is a directory");
else
System.out.println(s[i]+" is a file");
}
}
}
f.list(new JavaFilter("Ex"))
3 顯示為樹形
樹形結(jié)構(gòu)應(yīng)用十分廣泛。
下面這段代碼根據(jù)用戶添加的數(shù)據(jù),在內(nèi)存中構(gòu)建一個(gè)邏輯上等價(jià)的樹形結(jié)構(gòu)。
通過ShowTree() 可以把它顯示為控制中的樣子。
其中:
a.add(‘a(chǎn)’, ‘b’);
a.add(‘b’, ‘e’);
表示:‘b’ 作為 ‘a(chǎn)’ 的孩子節(jié)點(diǎn);‘e’ 作為 'b’的孩子節(jié)點(diǎn)。
如代碼中給出的示例數(shù)據(jù),輸出結(jié)果應(yīng)該為:
a–b--e
| |–f--j
| |–k
|–c
|–d--g–h
|–i
請(qǐng)閱讀下面的代碼,填寫缺失的部分(下劃線部分)。
注意:請(qǐng)把填空的答案(僅填空處的答案,不包括題面)存入考生文件夾下對(duì)應(yīng)題號(hào)的“解答.txt”中即可。
直接寫在題面中不能得分。
import java.util.*;
class MyTree
{
private Map map = new HashMap();
public void add(char parent, char child)
{
List<Character> t = (List<Character>)map.get(parent);
if(t==null)
{
t = new Vector<Character>();
____________________; // 填空1
}
t.add(child);
}
public List<Character> getChild(char x)
{
return (List<Character>)map.get(x);
}
}
public class My
{
public static List<String> showTree(MyTree tree, char x)
{
List<Character> t = tree.getChild(x);
List<String> r = new Vector<String>();
if(t==null)
{
r.add("" + x);
return r;
}
for(int i=0; i<t.size(); i++)
{
List<String> ri = showTree(tree, t.get(i));
for(int j=0; j<ri.size(); j++)
{
String pre = "| ";
if(j==0)
{
if(i==0)
pre = x + "--";
else
pre = "|--";
}
else
{
if(i==__________________) // 填空2
pre = " ";
else
pre = "| ";
}
r.add(pre + ri.get(j));
}
}
return r;
}
public static void main(String[] args)
{
MyTree a = new MyTree();
a.add('a', 'b');
a.add('b', 'e');
a.add('b', 'f');
a.add('a', 'c');
a.add('a', 'd');
a.add('d', 'g');
a.add('d', 'i');
a.add('g', 'h');
a.add('f', 'j');
a.add('f', 'k');
List<String> lst = showTree(a, 'a');
for(int i=0; i<lst.size(); i++)
{
System.out.println(lst.get(i));
}
}
}
map.put(parent, t)
i== t.size()-1
4 楊輝三角系數(shù)
(a+b)的n次冪的展開式中各項(xiàng)的系數(shù)很有規(guī)律,對(duì)于n=2,3,4時(shí)分別是:1 2 1, 1 3 3 1,1 4 6 4 1。這些系數(shù)構(gòu)成了著名的楊輝三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
下列的程序給出了計(jì)算第m層的第n個(gè)系數(shù)的計(jì)算方法,試完善之(m,n都從0算起)。
public static int f(int m, int n)
{
if(m==0) return 1;
if(n==0 || n==m) return 1;
return __________________________;
}
f(m - 1, n - 1) + f(m - 1, n)
5 圓周率與級(jí)數(shù)
圓周率
我國(guó)古代數(shù)學(xué)家對(duì)圓周率方面的研究工作,成績(jī)是突出的。三國(guó)時(shí)期的劉徽、南北朝時(shí)期的祖沖之都在這個(gè)領(lǐng)域取得過輝煌戰(zhàn)績(jī)。
有了計(jì)算機(jī),圓周率的計(jì)算變得十分容易了。如今,人們創(chuàng)造了上百種方法求π的值。其中比較常用且易于編程的是無窮級(jí)數(shù)法。
π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 - …
是初學(xué)者特別喜歡的一個(gè)級(jí)數(shù)形式,但其缺點(diǎn)是收斂太慢。
π/2 = 1 + 1/3 +1/32/5 + 1/32/53/7 + 1/32/53/74/9 + …
是收斂很快的一個(gè)級(jí)數(shù)方法。下面的代碼演示了用這種方法計(jì)算π值。請(qǐng)?zhí)顚懭笔У拇a部分。把填空的
答案(僅填空處的答案,不包括題面)存入考生文件夾下對(duì)應(yīng)題號(hào)的“解答.txt”中即可。
double x = 1;
double y = 1;
int a = 1;
int b = 3;
while(y>1e-15)
{
y = __________;
x += y;
a++;
b += 2;
}
System.out.println(x*2);
y * a / b
6 整數(shù)翻轉(zhuǎn)
以下程序把一個(gè)整數(shù)翻轉(zhuǎn)(8765變?yōu)椋?678),請(qǐng)補(bǔ)充缺少的代碼。
int n = 8765;
int m = 0;
while(n>0)
{
m = ________________________;
n = n / 10;
}
System.out.println(m);
m * 10 + n % 10
7 自行車行程
計(jì)算行程
低碳生活,有氧運(yùn)動(dòng)。騎自行車出行是個(gè)好主意。小明為自己的自行車裝了個(gè)計(jì)數(shù)器,可以計(jì)算出輪子轉(zhuǎn)動(dòng)的圈數(shù)。在一次騎車旅行中,出發(fā)時(shí)計(jì)算器的示數(shù)為begin,到達(dá)目的地時(shí)的示數(shù)為end。下列代碼計(jì)算了小明一共騎行了多遠(yuǎn)(單位:公里)。其中d表示小明自行車輪子的直徑(單位:米)。
把填空的答案(僅填空處的答案,不包括題面)存入考生文件夾下對(duì)應(yīng)題號(hào)的“解答.txt”中即可。
public static double getDistance(int begin, int end, double d)
{
return (end-begin) * Math.PI * d _________;
}
/1000
8 祖沖之割圓法
南北朝時(shí),我國(guó)數(shù)學(xué)家祖沖之首先把圓周率值
1
計(jì)算到小數(shù)點(diǎn)后六位,比歐洲早了1100年!他采
用的是稱為“割圓法”的算法,實(shí)際上已經(jīng)蘊(yùn)含
著現(xiàn)代微積分的思想。
如圖【1.jpg】所示,圓的內(nèi)接正六邊形周長(zhǎng)
與圓的周長(zhǎng)近似。多邊形的邊越多,接近的越好
!我們從正六邊形開始割圓吧。
如圖【2.jpg】所示,從圓心做弦的垂線,可
把6邊形分割為12邊形。該12邊形的邊長(zhǎng)a’的計(jì)
算方法很容易利用勾股定理給出。之后,再分割
為正24邊形,…如此循環(huán)會(huì)越來越接近圓周。
之所以從正六邊開始,是因?yàn)榇藭r(shí)邊長(zhǎng)與半徑
相等,便于計(jì)算。取半徑值為1,開始割圓吧!
以下代碼描述了割圓過程。
程序先輸出了標(biāo)準(zhǔn)圓周率值,緊接著輸出了不
斷分割過程中多邊形邊數(shù)和所對(duì)應(yīng)的圓周率逼近
值。
public class B21
{
public static void main(String[]
args)
{
System.out.println("標(biāo)
準(zhǔn) " + Math.PI);
double a = 1;
int n = 6;
for(int i=0; i<10; i++)
{
double b =
Math.sqrt(1-(a/2)*(a/2));
a =
Math.sqrt((1-b)*(1-b) + (a/2)*(a/2));
n =
______________; //填空
System.out.println(n + " " + _______________);
// 填空
}
}
}
請(qǐng)分析代碼邏輯,并推測(cè)劃線處的代碼。
答案寫在 “解答.txt” 文件中
注意:只寫劃線處應(yīng)該填的內(nèi)容,劃線前后的內(nèi)
容不要抄寫。
n * 2
a / 2 * n
標(biāo)準(zhǔn) 3.141592653589793
12 3.105828541230249
24 3.1326286132812378
48 3.1393502030468667
96 3.14103195089051
192 3.1414524722854624
384 3.141557607911858
768 3.1415838921483186
1536 3.1415904632280505
3072 3.1415921059992717
6144 3.1415925166921577
9 最大5個(gè)數(shù)
[12,127,85,66,27,34,15,344,156,344,29,47,....]
這是某設(shè)備測(cè)量到的工程數(shù)據(jù)。
因工程要求,需要找出最大的5個(gè)值。
一般的想法是對(duì)它排序,輸出前5個(gè)。但當(dāng)數(shù)據(jù)較多時(shí),這樣做很浪費(fèi)時(shí)間。因?yàn)閷?duì)輸出數(shù)據(jù)以外的數(shù)據(jù)進(jìn)行排序并非工程要求,即便是要輸出的5個(gè)數(shù)字,也并不要求按大小順序,只要找到5個(gè)就可以。
以下的代碼采用了另外的思路。考慮如果手里已經(jīng)抓著5個(gè)最大數(shù),再來一個(gè)數(shù)據(jù)怎么辦呢?讓它和手里的數(shù)據(jù)比,如果比哪個(gè)大,就搶占它的座位,讓那個(gè)被擠出來的再自己找位子,....
import java.util.*;
public class B23
{
public static List<Integer> max5(List<Integer> lst)
{
if(lst.size()<=5) return lst;
int a = _______________________; // 填空
List<Integer> b = max5(lst);
for(int i=0; i<b.size(); i++)
{
int t = b.get(i);
if(a>t)
{
__________________; // 填空
a = t;
}
}
return b;
}
public static void main(String[] args)
{
List<Integer> lst = new Vector<Integer>();
lst.addAll(Arrays.asList(12,127,85,66,27,34,15,344,156,344,29,47));
System.out.println(max5(lst));
}
}
請(qǐng)分析代碼邏輯,并推測(cè)劃線處的代碼。
答案寫在 “解答.txt” 文件中
注意:只寫劃線處應(yīng)該填的內(nèi)容,劃線前后的內(nèi)容不要抄寫。
lst.remove(0)
lst.set(i, a) 或者 b.set(i, a)
10 最大鏡像子串
【代碼填空】(滿分12分)
串“abcba”以字母“c”為中心左右對(duì)稱;串“abba” 是另一種模式的左右對(duì)稱。這兩種情況我們都稱這個(gè)串是鏡像串。特別地,只含有1個(gè)字母的串,可以看成是第一種模式的鏡像串。
一個(gè)串可以含有許多鏡像子串。我們的目標(biāo)是求一個(gè)串的最大鏡像子串(最長(zhǎng)的鏡像子串),如果有多個(gè)最大鏡像子串,對(duì)稱中心靠左的優(yōu)先選中。例如:“abcdeefghhgfeiieje444k444lmn”的最大鏡像子串是:“efghhgfe”
下面的靜態(tài)方法實(shí)現(xiàn)了該功能,請(qǐng)仔細(xì)閱讀并分析代碼,填寫空白處的代碼,使得程序的邏輯合理,結(jié)果正確。
// 求最大(長(zhǎng)度最大)鏡像對(duì)稱子串
public static String getMaxMirrorString(String s)
{
String max_s = ""; // 所求的最大對(duì)稱子串
for(int i=0; i<s.length(); i++)
{
// 第一種對(duì)稱模式
int step = 1;
try{
for(;;)
{
if(s.charAt(i-step) != s.charAt(i+step)) break;
step++;
}
}catch(Exception e){}
String s1 = s.substring(_____________________________); // 填空1
// 第二種對(duì)稱模式
step = 0;
try{
for(;;)
{
if(_________________________________) break; // 填空2
step++;
}
}catch(Exception e){}
String s2 = s.substring(i-step+1,i+step+1);
if(s1.length() > max_s.length()) max_s = s1;
if(s2.length() > max_s.length()) max_s = s2;
}
return max_s;
}
【注意】
只填寫缺少的部分,不要抄寫已有的代碼。
所填寫代碼不超過1條語句(句中不會(huì)含有分號(hào))
所填代碼長(zhǎng)度不超過256個(gè)字符。
答案寫在“解答.txt”中,不要寫在這里!
i - step + 1, i + step
s.charAt(i - step) != s.charAt(i + step + 1)
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。