1. 定义一个包含10个元素的数组,对其进行赋值,使每个元素的值等于其下标
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个元素组成的一维数组,求该数组中的最大值和最小值。及最大值和最小值的平均值 。
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的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置(类似 约瑟夫环)
有两种做法:面向过程,面向对象;下面两种写法为过程;面相对像 以后再传。
写法一:
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的同学可以写循环赋值。
//网上做法 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个,求该数组中第二大的数的下标
//没有学到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的值存入一个新的数组,生成新的数组:
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个评委打分,(去掉一个最高一个最低)求平均分?
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个整数。 然后判断这个数组中有几个偶数,再定义一个正好能存放这几个偶数的数组, 将上一个数组中的所有偶数复制过来。最后循环输出这些偶数。
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、不能使用额外存储空间
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);//自定义的输出方法
