您的位置:首页 > 编程语言 > Java开发

javaSE 数组练习题1

2019-05-25 15:31 120 查看

1. 定义一个包含10个元素的数组,对其进行赋值,使每个元素的值等于其下标

[code]		int[] arr=new int[10];
for(int i=0;i<10;i++) {
arr[i]=i;
}
for(int a:arr) {
System.out.println(a);
}

2 定义一个10个元素组成的一维数组,求该数组中的最大值和最小值。及最大值和最小值的平均值 。

[code]		int[] arr1=new int[] {2,3,4,77,44,676,-87,99,345,778};
int max=arr1[0],min=arr1[0];
//int index=0;//根据index取最大最小值得位置
for(int i:arr1) {
if(max<i) max=i;
if(min>i) min=i;
}

System.out.println("最小:"+min);
System.out.println("最大:"+max);
//		System.out.println("平均值:"+((max+min)>>1));
System.out.println("平均值:"+((max+min)/(2*1.0)));//得到小数

 

3  500个人围城一个圈,从1开始报数,每数到3的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置(类似  约瑟夫环)

有两种做法:面向过程,面向对象;下面两种写法为过程;面相对像 以后再传。

写法一:

[code]		boolean[] bol=new boolean[500];
//Arrays.fill(bol, true); //可以将所有赋值为true,可能更好理解逻辑
int index=500,count=1;//index代表在圈中的人,count代表报数
while(index>1) {
for(int i=0;i<500;i++) {
if(bol[i]) {//跳过不在圈中的人,true代表离开圈子的人
continue;
}
count++;
if(count%3==0) {//数到3的倍数         或者count==3,则if最下面count=0
bol[i]=true;//将此人状态改为true:离开圈子
index--;//圈中人数减一
//count=0;//重新计数
}
}
}
int ii=0;
for(boolean b:bol) {//最后只剩下一个值为false的元素
ii++;
if(!b) {
System.out.println(ii);
break;
}
}

 

 

写法二:没有学到Arrays.fill的同学可以写循环赋值。

[code]//网上做法
boolean[] b = new boolean[500];
Arrays.fill(b, true);//将数组中的元素全部设置为true,表示初始状态人都在圈中
int count1 = 0;//计数器,统计当前报数的位置
int len = b.length;//初始化圈中总人数
int index = 0;//初始化数组的索引
while(len > 1){//开始循环报数
if(b[index]){//判断当前索引处的人是否在圈中
count1++;//报数
if(count1%3 == 0){//判断是否到达3的倍数
len--;//剩余人数减一
b[index] = false;//将状态标记为离开(false)
}
}
index++;//数组的索引递增
if(index == b.length) index = 0;//如果数完一圈,则索引归零,这里很重要

}
for(int i = 0;i<b.length;i++){//遍历判断圈中剩余的最后一个为true的元素原来的索引即为剩下的人
if(b[i]){
System.out.println("剩余的人原来的位置:"+i);
break;
}
}

4.给定一个整型数组,数组成员10个,求该数组中第二大的数的下标

[code]//没有学到Arrays用法的同学,请写循环复制数组,排序数组,思路很简单
//利用Arrays的方法可以大大减少代码

int[] num = new int[]{1, 2, 3, 4, 5, 6, -7, 8, 9, 0};
//int[] num1 = Arrays.copyOfRange(num, 0, 10);//按范围复制
int[] arr1 = Arrays.copyOf(num, num.length);//复制一个新的数组
Arrays.sort(num);//从小到大排序,下标变化了
System.out.println("第二大的数字:"+num[num.length-1-1]);
for (int i = 0; i < arr1.length-1; i++) {
if (arr1[i] == num[num.length-1-1]) {
System.out.println("第二大的数的下标为"+i);
}
}

 

5 选择排序算法

6  现在有如下一个数组:
         int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
         要求将以上数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组:

[code]		int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
int length=0;
for(int i=0;i<oldArr.length;i++) {
if(oldArr[i]!=0) {
length++;
}
}
int newArr[]=new int[length];
int j=0;
for(int i=0;i<oldArr.length;i++) {
if(oldArr[i]!=0) {
newArr[j]=oldArr[i];
j++;
}
}
for(int a:newArr) System.out.println(a+" ");


        

7.参加青年歌手大奖赛,有10个评委打分,(去掉一个最高一个最低)求平均分?
        

[code]		Scanner input=new Scanner(System.in);
System.out.println("请输入10个分数");
double score[] = new double[10];
//double score[] = new double[] {98.1,97.3,97.5,96.8,95.9,99.1,98.7,95.9,97.7,96.9};
for(int i=0;i<10;i++) {
score[i]=input.nextDouble();
}
//排序
Arrays.sort(score);
double sum=0;
for (int i=1;i<score.length-1;i++) {
sum+=score[i];
}

DecimalFormat df = new DecimalFormat("#.00");//格式化小数
String.format("%.2f",sum);//格式化小数

System.out.println("去掉一个最高分:"+score[score.length-1]);
System.out.println("去掉一个最低分:"+score[0]);
System.out.println("总分:"+df.format(sum));
//		System.out.println("总分:"+String.format("%.2f",sum));
System.out.println("平均得分:"+String.format("%.2f",sum/(score.length-2)));

8. 11、定义一个长度为10的整型数组,循环输入10个整数。
           然后判断这个数组中有几个偶数,再定义一个正好能存放这几个偶数的数组,
           将上一个数组中的所有偶数复制过来。最后循环输出这些偶数。

[code]		int[] arr = new int[5];
Scanner sc = new Scanner(System.in);
//循环输入10个整数存入数组
int m=0;
for(int i=0;i<arr.length;i++){
System.out.println("输入"+(i+1)+"个整数:");
arr[i]=sc.nextInt();
if(arr[i]%2==0)//判断输入的数是否为偶数
m++;
}
int[] arr2=new int[m];
int index=0;
for(int n:arr) {
if(n%2==0) {
arr2[index]=n;
index++;
System.out.println(n);
}
}
print(arr2);

 

9. 给定含有n个元素的整型数组arr,其中包括0元素和非0元素,对数组进行排序,要求: 
         1、排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变 
         2、不能使用额外存储空间

[code]	    int arr3[]=new int[] {1,0,2,0,3,0};
for(int i=0;i<arr3.length;i++) {
for(int k=0;k<arr3.length-1;k++) {//这里没有arr3.length-1-i
if(arr3[k]!=0&&arr3[k+1]==0) {
int tmp=arr3[k];
arr3[k]=arr3[k+1];
arr3[k+1]=tmp;
break;
}
}
}
print(arr3);//自定义的输出方法

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: