熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 數據結構 >> 正文

Java經典算法編程題目,適合面試前進行練習

2022-06-13   來源: 數據結構 

定義一個int型的一維數組包含個元素分別賦一些隨機整數然後求出所有元素的最大值

最小值平均值和值並輸出出來

class ArrayNumber{

public static void main(String[] args){

int[] arrayNumber;

arrayNumber = new int[];

Systemoutprintln(&#;以下是隨機的個整數&#;);

// 填入隨機的 個整數

for (int i =; i<arrayNumberlength; i++){

arrayNumber[i] = (int)(*Mathrandom());

Systemoutprint(arrayNumber[i]+&#; &#;);

}

Systemoutprintln();

int max = arrayNumber[];

int min = arrayNumber[];

int sum = ;

for (int i =; i<arrayNumberlength; i++){

if(max < arrayNumber[i])

max = arrayNumber[i];? //求最大值

if(min > arrayNumber[i])

min = arrayNumber[i]; //求最小值

sum += arrayNumber[i];

}

Systemoutprintln(&#;其中 Max=&#;+max+&#;Min=&#;+min+&#;Sum=&#;+sum+&#;Avg=&#;+sum/);

}

}

定義一個int型的一維數組包含個元素分別賦值為~ 然後將數組中的元素都向前移一個位置

a[]=a[]a[]=a[]…最後一個元素的值是原來第一個元素的值然後輸出這個數組

定義一個int型的一維數組包含個元素用來存儲每個學員的成績循環產生~之間的隨機整數

將它們存儲到一維數組中然後統計成績低於平均分的學員的人數並輸出出來

(選做)承上題將這個成績按照從高到低的順序輸出出來

(選做)編寫程序將一個數組中的元素倒排過來例如原數組為則倒排後數組中的值

要求定義一個int型數組a包含個元素保存個隨機的位數再定義一個

int型數組b包含個元素統計a數組中的元素對求余等於的個數保存

到b[]中求余等於的個數保存到b[]中……依此類推

class Remain{

public? static void main( String[] args){

int[] a = new int[];

//保存個隨機位數到 a 中

for (int i = ;? i < alength;? i++){

a[i] = (int) (*Mathrandom());

}

//統計 a 數組中的元素對 求余的各個的數目

int[] b = new int[];

int ksum;

for (int j = ;? j < blength;? j++){

for (k=sum=;? k < alength;? k++){

if ((a[k]%)==j) sum++;

}

b[j] = sum;

Systemoutprintf(&#;b[%d]=%d\n&#;jb[j]);

}

}

}

定義一個*的二維數組用來存儲某班級位學員的門課的成績門課

按存儲順序依次為core C++coreJavaServletJSP和EJB

)循環給二維數組的每一個元素賦~之間的隨機整數

)按照列表的方式輸出這些學員的每門課程的成績

)要求編寫程序求每個學員的總分將其保留在另外一個一維數組中

)要求編寫程序求所有學員的某門課程的平均分

class Student{

public static void main(String[] args ){

int[][] mark = new int[][];

// 給學生賦分數值隨機生成

for ( int i = ;? )

}

}//未完成

完成九宮格程序

在井字形的格局中(只能是奇數格局)放入數字(數字由)使每行每列以及斜角線的和都相等

經驗規則 開始按順序逐個填寫 ? 放在第一行的中間位置下一個數往右上角度處填寫

如果單邊越界則按頭尾相接地填如果有填寫沖突則填到剛才位置的底下一格

如果有兩邊越界則填到剛才位置的底下一格

個人認為可以先把最中間的數填到九宮格的最中間位置再按上面的規則逐個填寫而且

填的時候還可以把頭尾對應的數填到對應的格子中(第 n 個值跟倒數第 n 個值對應格局上以最中

間格為軸心對應)

這樣就可以同時填兩個數效率比之前更高其正確性有待數學論證(但多次實驗之後都沒發現有錯)

九宮格的 至少還可以填在另外的三個位置只是接下來的填寫順序需要相應改變

再根據九宮格的對稱性至少可以有種不同的填寫方式

import javautilScanner;

class NinePalace{

public static void main(String[] args){

// 定義 N 為九宮格的行列數需要輸入

Systemoutprintln(&#;請輸入九宮格的行列規模(只能是奇數的)&#;);

Scanner n = new Scanner(Systemin);

int N;

//判斷格局是否奇數 (可判斷出偶數負數 及小數)

double d;

while (true){

d = nnextDouble();

N = (int)d;

if ((dN)>E||N%==||N<)

{Systemoutprintln(&#;輸入出錯格局只能是正奇數請重新輸入&#;);}

else break;

}

//老師的九宮格填寫方法

int[][] result = new int[N][N]; //定義保存九宮格的數組

int row = ; //行 初始位置

int col = N/; //列 初始位置因為列由開始故N/是中間位置

for (int i=;? i<=N*N; i++){

result [row][col] = i;

row&#;;

col++;

if (row<&&col>=N){col&#;;row+=;} //行列都越界

else if (row<){ row = N;} //行越界

else if (col>=N){col = ;}? //列越界

else if (result[row][col] != ){col&#;;row+=;}? //有沖突

}

//打印出九宮格

for (int i=;? i<N;? i++){

for(int j=;? j<N; j++){Systemoutprint(result[i][j]+&#;\t&#;);}

Systemoutprintln();

}

//我個人的填格方式

int[][] result = new int[N][N];? //為免沖突重新 new 一個數組

result[N/][N/] = (N*N+)/;? //先把中間值賦予中間位置

row = ; //定義行及列的初始賦值位置之前賦值的for對兩個值有影響故需重新定位

col = N/;

for (int i=; i<=N*N/; i++){

result[row][col] = i;

//下面這句是把跟 i 對應的值放到格局對應的位置上

result[Nrow][Ncol] = N*N+i;

row&#;;

col++;

if (row<){ row = N;} //行越界

else if (col>=N){col = ;}? //列越界

else if (result[row][col] != ){col&#;;row+=;}? //有沖突

//這方法不可能出現行列兩邊都越界的情況詳情需要數學論證

}

Systemoutprintln();

//再次打印出九宮格以對比驗證

for (int i=;? i<N;? i++){

for(int j=;? j<N; j++){Systemoutprint(result[i][j]+&#;\t&#;);}

Systemoutprintln();

}

}

}

求一個*矩陣對角線元素之和

打印楊輝三角

約梭芬殺人法

把犯人圍成一圈每次從固定位置開始算起殺掉第個人直到剩下最後一個

_用數組實現約瑟夫出圈問題 n個人排成一圈從第一個人開始報數開始報報到m的人出圈剩下的人繼續開始從報數直到所有的人都出圈為止對於給定的nm求出所有人的出圈順序

判斷隨機整數是否是素數

產生之間的隨機整數然後判斷這個隨機整數哪些是素數哪些不是?

public class PrimeTest{

public static void main(String args[]){

for(int i=;i<;i++){

int num = (int)(Mathrandom()*);

PrimeTest t = new PrimeTest();

if(tisPrime(num)){

Systemoutprintln(num+&#; 是素數!&#;);

}else{

Systemoutprintln(num+&#; 不是素數!&#;);

}

Systemoutprintln();

}

}

public boolean isPrime(int num){

for(int i=;i<=num/;i++){

if(num%i==){

Systemoutprintln(num+&#;第一個被&#;+i+&#;整除!&#;);

return false;

}

}

return true;

}

}

冒泡排序法

//按從大到小的排序

int tmp = a[];

for (int i=; i < alength; i++){

for (int j=; j < alength &#; i ; j++){

if (a[j] < a[j+]) {

tmp = a[j];

a[j] = a[j+];

a[j+] = tmp;

}

}

}


From:http://tw.wingwit.com/Article/program/sjjg/201405/30746.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.