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);//自定义的输出方法
相关文章推荐
- JavaSE之数组练习题
- [练习题] 将数组中的负数全部移到非负数的前面,要求O(n)时间复杂度
- JavaSe之数组
- 【史上最强JavaSE笔记】之数组篇
- [javase][json]fastJson在java后台转换json格式数据探究--处理数组/List/Map
- hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)
- JavaSE学习----数组
- JavaSE基础数组排序
- java- 数组练习题1
- 数组变树练习题
- 一、javaSE (十五)对象数组、集合(Collection)、集合(List)
- JS中,关于数组的练习题
- 关于数组长度问题你都全都掌握了吗?数组求长度练习题就在这里
- foreach循环练习题:任意输入字符串将其转换成字符数组
- JavaSE — 基础语义 — 数组和数据类型详解
- 【JavaSE_学习笔记】排序、二分查找与数组工具类
- javase--2数组
- java 数组练习题2
- 05 - JavaSE之数组
- 【JavaSE入门系列】第05章_数组