zoukankan      html  css  js  c++  java
  • 选择排序、冒泡排序、题

    选择排序:

      从大到小排序:核心是把第一个数和其他位置的数依次比较,如果第一个小于其他位置的数就置换,内层循环结束后,第一个位置的数最小,第一个位置固定不在变化,第二个位置开始比较。外层循环是控制每次第i个数开始与其他位置的数比较固定下来,内层循环动态表示第i+1,i+2.. n<数组长度

    public class Demo001 {
    public static void main(String[] args) {
        int [] arr = new int[]{12,6,88,23,9};
        for (int i=0;i<arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]<arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]+" ");
        }
      }
    }
    

      

    冒泡排序:

       把数组按照从小到大排序,双重循环嵌套,外层循环每次把最大的数找出来,放到最后面,需要进行数组长度-1次,内层循环第一个数与第二个数比较,找出最大数,如果不同就置换位置,让第二个位置的数是俩者之大,在于第三个数比较。依次比较,选出最大数。内层循环第一次是从下标为0,到和下标为数组长度-1的数比较。在内层循环第一轮结束后,最后一个元素将不再参与比较。第二轮是从下标0到与数组长度-1-1比较。第三轮是0->数组长度-1-2,由动态变化可得

    	int[] arr = {12,6,88,23,9};
            for(int i=0;i<arr.length;i++){
                for (int j=0;j<arr.length-1-i;j++){
                    if (arr[j]>arr[j+1]){
                        int temp;
                        temp = arr[j+1];
                        arr[j+1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            for (int i=0;i<arr.length;i++){
                System.out.print(arr[i]+" ");
            }
    

      

    一 获得特定数量硬币问题

    小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。

    魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币

    魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币

    小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。

    输入描述: 输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。

    输出描述: 输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。

    输入例子1: 10

    输出例子1: 122

    我的:

      

    public class MagicMoney {
        public static void main(String[] args) {
    
            System.out.println("小易,请输入你需要多少个魔法币");
            Scanner sc = new Scanner(System.in);
           int total = sc.nextInt();
            StringBuffer s = chooseMachine(total);
            System.out.println(s.reverse());
    
        }
        public static StringBuffer chooseMachine(int total){
            StringBuffer sb = new StringBuffer();
            while (true){
                if (total>2){
                    if (total%2==0){
                        sb.append("2");
                        total = (total-2)/2;
                    }else{
                        sb.append("1");
                        total = (total-1)/2;
                    }
                }else{
                    if (total==1){
                        sb.append(1);
                    }else if(total==2){
                        sb.append(2);
                    }
    
                    break;
                }
    
            }
            return sb;
    
    
        }
    }
    

      参考答案的

    public class Main {
    	// 解题关键:明确魔法机器1只能产生奇数,魔法机器2只能产生偶数即可。我们从后往前一步一步推回去即可。
    
    	public static void main(String[] args) {
    		System.out.println("请输入要获得的硬币数量:");
    		Scanner scanner = new Scanner(System.in);
    		boolean flag = true;
    		while (flag) {
    			try {
    				int coincount = scanner.nextInt();
    				StringBuilder sb = new StringBuilder();
    				while (coincount >= 1) {
    					// 偶数的情况
    					if (coincount % 2 == 0) {
    						coincount = (coincount - 2) / 2;
    						sb.append("2");
    						// 奇数的情况
    					} else {
    						coincount = (coincount - 1) / 2;
    						sb.append("1");
    					}
    				}
    				// 输出反转后的字符串
    				System.out.println(sb.reverse());
    				flag=false;//程序结束
    			} catch (InputMismatchException e) {
    				System.out.println("输入数据类型不匹配,请您重新输入:");
    				scanner.nextLine();
    				continue;
    			}
    		}
    
    	}
    }
    

     

    二 求“相反数”问题

    为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数"。例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1.

    输入描述: 输入包括一个整数n,(1 ≤ n ≤ 10^5)

    输出描述: 输出一个整数,表示n的相反数

    输入例子1: 1325

    输出例子1: 6556

    import java.util.Scanner;
    
    public class reverse {
        public static void main(String[] args) {
            System.out.println("输入一个整数:");
            Scanner scanner = new Scanner(System.in);
            String s = scanner.next();
            int number1 = Integer.parseInt(s);
            int number = Integer.parseInt(new StringBuilder(s).reverse().toString());
            System.out.println(number1+number);
        }
    }
    

      

     

  • 相关阅读:
    linux nfs
    gsoap
    error: ignoring return value of 编译错误处理
    SSIS可靠性和扩展性—错误输出
    SSIS中的脚本—脚本组件
    SQL点滴24—监测表的变化(转载)
    SSIS中的脚本—脚本任务
    SSIS可靠性和扩展性—简介
    SSIS中的脚本—表达式
    SSIS可靠性和扩展性—可扩展性
  • 原文地址:https://www.cnblogs.com/ghwq/p/12820713.html
Copyright © 2011-2022 走看看