编程题
1.给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
package com.liuzhen.array_2; public class OddEvenSort { //解法1:一头一尾指针往中间扫描 public void getOddEvenSort1(int[] A){ if(A.length == 1) return; int begin = 0; int end = A.length - 1; while(begin < end){ if(A[begin] % 2 == 1) //当A[begin]为奇数时 begin++; else if(A[end] % 2 == 0) //当A[end] 为偶数时 end--; else //当A[begin]不是奇数且A[end]不是偶数时 swap(A,begin,end); } } //交换数组A的m位置和n位置上的值 public void swap(int[] A,int m,int n){ int temp = A[m]; A[m] = A[n]; A[n] = temp; } public static void main(String[] args){ OddEvenSort test = new OddEvenSort(); int[] A = {2,1,4,7,1,4,7,1,2,8,4,3,6,7,2,14,3,7,4,3,2,4,3,2,7}; test.getOddEvenSort1(A); System.out.println("使用方法1:一头一尾指针往中间扫描结果:"); for(int i = 0;i < A.length;i++) System.out.print(A[i]+" "); } }
2.找出数组中最后一个负数,打印出这个数和它的索引:
public void mian(){ int[] a={1,-2,3,-2,1,4,5}; for(int i=a.length-1;i>a.length-6;i--){ if(a[i]<0){ System.out.println(a[i]); System.out.println(i); } }
3.数组排序
public void sortIntegers(int[] A) { // write your code here int i,j; int tamp; for(i=0;i<A.length-1;i++){ for(j=0;j<A.length-i-1;j++){ if(A[j]>A[j+1]){ tamp=A[j+1]; A[j+1]=A[j]; A[j]=tamp; } } } for(i=0;i<A.length;i++){ System.out.print(A[i]); } } public void main(){ int[] A={3,2,1,4,5}; sortIntegers(A); }
4.在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数
def func(*argc): lens = len(*argc) count = 0 tup=argc[0] #取出参数元组 for i in range(0,lens-1): for j in range(i+1,lens): if(tup[i] > tup[j]): count += 1 return count list = [7,5,6,4] print(func(list))
5.取两个数组的交集:
private static void getJ(Integer[] m, Integer[] n) { List<Integer> rs = new ArrayList<Integer>(); // 将较长的数组转换为set Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n)); // 遍历较短的数组,实现最少循环 for (Integer i : m.length > n.length ? n : m) { if (set.contains(i)) { rs.add(i); } } for(Integer i:rs){ System.out.println(i); } } 取两个数组的并集 public void getB(Integer[] m, Integer[] n) { // 将数组转换为set集合 Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(m)); Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(n)); // 合并两个集合 set1.addAll(set2); Integer[] arr = {}; // return set1.toArray(arr); for(Integer i:set1.toArray(arr)){ System.out.println(i); } } 取两个数组的差集: public void main(){ Integer[] a={1,2,2,3,4}; Integer[] b={1,2,2}; getJ(a,b); }
6.利用if实现一个随机要骰子的小游戏,随机摇一个骰子点数,玩家输入大小,利用if比较,猜对啦 猜错啦
double value = Math.random(); int number = (int)(value*6+1); //System.out.println(number); System.out.println("请猜大小:"); Scanner input = new Scanner(System.in); String choose = input.nextLine(); if((number<=3 && choose.equals("小"))||(number>3 && choose.equals("大"))){ System.out.println("猜对了,骰子数是:"+number); }else{ System.out.println("猜错了,骰子数是:"+number); }
7.利用switch语句实现一个 判断学生成绩对应的区间 不及格 60-70及格、70-80中、80-90良、90-100优秀、100满分
System.out.println("请输入分数"); Scanner input = new Scanner(System.in); int score = input.nextInt(); switch(score/10){ case 1: case 2: case 3: case 4: case 5: System.out.println("不及格"); break; case 6: System.out.println("及格"); break; case 7: System.out.println("中等"); break; case 8: System.out.println("良好"); break; case 9: System.out.println("优秀"); break; case 10: if(score==100){ System.out.println("满分"); break; } default: System.out.println("不存在的分数");
8.操场上有100多人,三个人一组多1人,四个人一组多2人,五个人一组多2人,求解操场上有多少人
for(int x=100;x<200;x++){ if(x%3==1 && x%4==2 && x%5==2){ System.out.println("这个人数是:"+x); } }
9.甲乙丙丁四个人加工零件,加工的总零件数是370,如果甲加工的零件数多10,乙加工的零件数少20,丙加工的零件数乘以2,丁加工的零件数除以2,则四人加工的零件数就相等了,求四人加工的零件数分别是多少
//解题思路:如果四人相等的加工零件数为x,则甲:x-10;乙:x+20;丙:x/2;丁:x*2 for(int x=1;x<370;x++){ if((x-10)+(x+20)+(x/2)+(x*2)==370){ System.out.println("甲加工零件数是:"+(x-10)); System.out.println("乙加工零件数是:"+(x+20)); System.out.println("丙加工零件数是:"+(x/2)); System.out.println("丁加工零件数是:"+(x*2)); } }
10.鸡兔同笼问题:小鸡+小兔总数50只,脚的总数160,小鸡和小兔各多少只
for(int x=1;x<50;x++){ for(int y=1;y<50;y++){ if(x+y==50 && 2*x+4*y==160){ System.out.println("鸡有:"+x+"只"); System.out.println("兔有:"+y+"只"); } } }
11.通过循环找寻100-999之间三位数字的水仙花数(水仙花数:百位数字的三次方+十位数字的三次方+个位数字的三次方=这个数本身)
for(int i=100;i<999;i++){ //百位数:int i=i/100 十位数:i%100/10 个位数:i%10 if((i/100)*(i/100)*(i/100)+(i%100/10)*(i%100/10)*(i%100/10)+(i%10)*(i%10)*(i%10)==i){ System.out.println("这个数:"+i+"是水仙花数"); } //可以通过Math.pow(a,b)方法来计算a的b次方 if(Math.pow((i/100),3)+Math.pow((i%100/10),3)+Math.pow((i%10),3)==i){ System.out.println("这个数:"+i+"是水仙花数"); } }
12.画出如下图形:
*
**
***
//解题思路: //$$$* $:3 *:1 i:1 //$$** $:2 *:2 i:2 //$*** $:1 *:3 i:3 //**** $:0 *:4 i:4 //画占位符 循环次数:4-i //画* 循环次数:i //换行 for(int i=1;i<=4;i++){ //先画空格 for(int j=1;j<=4-i;j++){ System.out.print(" "); } //画* for(int j=1;j<=i;j++){ System.out.print("*"); } System.out.println(); }
13.画出如下图形:
*******
***#***
**###**
*#####*
// 解题思路 // ******* 第一行不符合规律,单独打印 // ***#*** 第二行*:3 #:1 i:2 // **###** 第三行*:2 #:3 i:3 // *#####* 第四行*:1 #:5 i:4 for(int i=1;i<=4;i++){ if(i==1){ System.out.print("*******"); }else{ for(int j=1;j<=5-i;j++){ System.out.print("*"); } for(int j=1;j<=2*i-3;j++){ System.out.print("#"); } for(int j=1;j<=5-i;j++){ System.out.print("*"); } } System.out.println(); }
14.画出如下图形:
1
121
12321
1234321
for(int i=1;i<=4;i++){ for(int j=1;j<=4-i;j++){ System.out.print(" "); } for(int j=1;j<=i;j++){ System.out.print(j); } for(int j=i-1;j>=1;j--){ System.out.print(j); } System.out.println(); }
15.画出九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+j*i); System.out.print(" "); } System.out.println(); }
16.找出2-100之间的质数,只能被1和自己本身整除的数
//思路:首先要先判断一个数是不是质数,排除1和本身的数,在这个范围内被这个数整除就不是质数 /* int num=9; boolean x=true; for(int i=2;i<num-1;i++){ if(num%i==0){ x=false; System.out.println(num+"这个数不是质数"); break; //如果满足if条件就跳出for循环 } } //如果for循环执行完没被整除,说明是质数 if(x==true){ System.out.println(num+"这个数是质数"); } */ //判断完一个数是否为质数后,再来判断2-100范围内的质数 for(int num=2;num<=100;num++){ boolean x=true; for(int i=2;i<num-1;i++){ if(num%i==0){ x=false; System.out.println(num+"这个数不是质数"); break; } } if(x==true){ System.out.println(num+"这个数是质数"); } }
17.有一个水池,已经盛满120立方米的水,有一个水管,每小时进水18立方米,有一个排水管,每小时排水30立方米,两个水管一起开,经过几个小时,水池水排完
int sum =120; int hour=1; while(sum>0){ sum+=18; sum-=30; System.out.println(hour+"小时,水池剩余水量:"+sum+"立方米"); hour++; }
18.小明同学以7km/h的速度从A走到B,哥哥以18km/h的速度从B走到A,A到B的距离是1000km,经过几个小时才能相遇
int hour=1; int sum=0; while(sum<1000){ sum+=7; sum+=18; System.out.println(hour+"小时,走了:"+sum+"米"); hour++; }
19.创建一个数组,用来存储1-100的偶数
int[] array = new int[50]; //array[0]=2 array[1]=4 array[2]=6 array[3]=8 array索引和值的规律就是 array[i]=2*i+2 for(int i=0;i<array.length;i++){ array[i]=2*i+2; } for(int value:array){ System.out.println(value); }
20.将数组a{1,2,3,4} b{5,6,7,8,9,10}内的元素对应位置互换
int[] a={1,2,3,4}; int[] b={5,6,7,8,9,10}; int[] c=a; a=b; b=c; for(int value:a){ System.out.println("a数组的值:"+value); } for(int value:b){ System.out.println("b数组的值:"+value); }
21.给定一个数组a{1,2,3,4,5,6}将元素头尾对应互换位置a{6,5,4,3,2,1}
int[] a={1,2,3,4,5,6,7}; //交换位置的次数就是数组长度/2 for(int i=0;i<a.length/2;i++){ int x=a[i]; a[i]=a[(a.length-1)-i]; a[(a.length-1)-i]=x; } for(int value:a){ System.out.println(value); }
22.给定一个数组a{1,2,3,4,5,6}计算数组所有元素的平均值
int[] a={1,2,3,4,5,6}; int sum=0; for(int value:a){ sum+=value; } System.out.println(sum); System.out.println(a.length); double avg=(double)sum/a.length; System.out.print(avg);
23.给定数组a{1,3,5,7,9,0,2,4,6,8}找寻数组中最大值和最小值
int[] a={1,3,5,7,9,0,2,4,6,8}; int max=a[0]; int min=a[0]; for(int i=0;i<a.length;i++){ if(a[i]<min){ min=a[i]; } if(max<a[i]){ max=a[i]; } } System.out.println(max); System.out.println(min);
24.给定两个数组a{1,2,3} b{4,5}合并两个数组
int[] a={1,2,3}; int[] b={4,5}; int[] c=new int[a.length+b.length]; for(int i=0;i<a.length;i++){ c[i]=a[i]; } for(int i=0;i<b.length;i++){ c[a.length+i]=b[i]; } for(int value:c){ System.out.println(value); }
25.给定一个数组a{1,2,3,9,4,5}按照数组中的最大值位置 将数组拆分成两个{1,2,3}{4,5}
//思路:1.找出最大的值对应的索引 2.创建两个新的数组 3.找到新数组的元素 int[] a={1,2,3,9,4,5}; int max = a[0]; int index=0; for(int i=0;i<a.length;i++){ if(a[i]>max){ max=a[i]; index=i; } } //创建两个新数组,新数组的长度可根据index来确定 int[] b=new int[index]; int[] c=new int[a.length-index-1]; for(int i=0;i<b.length;i++){ b[i]=a[i]; } for(int i=0;i<c.length;i++){ c[i]=a[index+1+i]; } for(int value:b){ System.out.println("b数组的值:"+value); } for(int value:c){ System.out.println("c数组的值:"+value); }
26.给定一个数组a{1,2,3,0,0,4,5,0,6,0,7}去掉数组中的0元素
//思路:1.找出非0元素的个数 2.创建一个新的数组 3.把非0元素放到新数组中 int[] a={1,2,3,0,0,4,5,0,6,0,7}; int count=0; for(int i=0;i<a.length;i++){ if(a[i]!=0){ count++; } } //创建一个新的数组,数组长度就是非0元素的个数 int[] b=new int[count]; //把旧数组的非0元素放到新数组中 int index=0;//用来记录新数组的索引 for(int i=0;i<a.length;i++){ if(a[i]!=0){ b[index]=a[i]; //当有值放入新数组后,索引就加1 index++; } } for(int value:b){ System.out.println(value); }
27.创建一个数组,存储2-100的质数
//思路:1.找出2-100的质数个数,即新数组的长度 2.创建新数组 3.将质数放到新数组 int count=0; for(int num=2;num<=100;num++){ boolean y=true; for(int i=2;i<num-1;i++){ if(num%i==0){ y=false; //System.out.println(num+"这个数不是质数"); break; } } if(y==true){ //System.out.println(num+"这个数是质数"); count++; } } int[] array=new int[count]; int index=0; for(int num=2;num<=100;num++){ boolean y=true; for(int i=2;i<num-1;i++){ if(num%i==0){ y=false; break; } } if(y==true){ array[index]=num; index++; } } for(int value:array){ System.out.println(value); }
28.数组排序 将数组a{5,3,2,1,4}按照升序排序{1,2,3,4,5}
int[] a={5,3,2,1,4}; for(int i=0;i<a.length-1;i++){//比较的轮次 for(int j=0;j<a.length-1;j++){//循环比较当前元素和后一个元素的大小 if(a[j]<a[j+1]){ int k=a[j]; a[j]=a[j+1]; a[j+1]=k; } } } for(int value:a){ System.out.println(value); }
29.用户的登录认证(用数组当作小数据库 存储 用户验证)
System.out.println("请输入账号:"); Scanner input = new Scanner(System.in); String userName=input.nextLine(); System.out.println("请输入密码:"); Scanner input2 = new Scanner(System.in); String password=input2.nextLine(); String[][] array={{"aaa","111"},{"bbb","222"},{"ccc","333"}}; boolean r=false; for(int i=0;i<array.length;i++){ if(userName.equals(array[i][0])){ if(!password.equals(array[i][1])){ //System.out.println("密码错误"); }else{ r=true; System.out.println("登录成功"); } break; } } if(r==false){ System.out.println("账号或密码错误"); }
30.模拟班级同学每周换座位
System.out.println("请输入交换周数:"); Scanner input=new Scanner(System.in); int week=input.nextInt(); //班级学生ID号 int[][] array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; for(int i=1;i<=week;i++){ int[] x=array[0]; array[0]=array[1]; array[1]=array[2]; array[2]=array[3]; array[3]=x; } for(int[] arr:array){ for(int v:arr){ System.out.println(v); } System.out.println("======="); }