java

位置:IT落伍者 >> java >> 浏览文章

Java经典算法编程题目,适合面试前进行练习


发布日期:2018年07月18日
 
Java经典算法编程题目,适合面试前进行练习

定义一个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;

}

}

}

               

上一篇:java面试、答辩题(3)

下一篇:jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?