编程题

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("=======");
		}

  

posted @ 2021-07-28 18:28  zhanchenglan  阅读(81)  评论(0编辑  收藏  举报