美文网首页
JAVA 天梯赛 (难点)

JAVA 天梯赛 (难点)

作者: 定格r | 来源:发表于2019-03-02 16:09 被阅读0次

    1.如何保留一位小数

    输入格式:
    输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。

    输出格式:
    在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。

    输入样例:
    169
    输出样例:
    124.2

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
         Scanner sc=new Scanner(System.in); 
         int H=sc.nextInt();
         double j=0;
         if(H<=300&&H>100) {
             j=(H-100)*0.9*2;
             System.out.println(String.format("%.1f",j));
         }
        }
    }
    

    保留小数 解析

    String.format("%.1f",j)); // String.format()函数 ,把 j 格式化为 %.1f 样子 ,小数点后一位浮点型数据

    2.如何使输入的数值横向排列

    image.png image.png

    创建一个 Scanner 实例

    3.如何把字符串复制给数组

    toCharArray() 方法将字符串转换为字符数组。

    3.世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
         Scanner sc=new Scanner(System.in); 
         String A=sc.nextLine();
         char[] arry=A.toCharArray();
         for(int i=6;i<arry.length;i++) {
             System.out.print(arry[i]);
          }
         System.out.print(arry[2]);
         for(int i=0;i<2;i++) {
             System.out.print(arry[i]);
          }
         for(int i=2;i<5;i++) {
             System.out.print(arry[i]);
          }
        }
    }
    

    4.输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

    0: ling
    1: yi
    2: er
    3: san
    4: si
    5: wu
    6: liu
    7: qi
    8: ba
    9: jiu

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String shu = sc.nextLine();
            char[] c = shu.toCharArray();
            int[] a = new int[c.length];
            for (int i = 0; i < c.length; i++) {   //把字符型数组转化为整型
                a[i] = c[i];
            }
            for (int i = 0; i < a.length; i++) {
                switch (a[i]) {
                case '0':
                    System.out.print("ling");
                    break;
                case '1':
                    System.out.print("yi");
                    break;
                case '2':
                    System.out.print("er");
                    break;
                case '3':
                    System.out.print("san");
                    break;
                case '4':
                    System.out.print("si");
                    break;
                case '5':
                    System.out.print("wu");
                    break;
                case '6':
                    System.out.print("liu");
                    break;
                case '7':
                    System.out.print("qi");
                    break;
                case '8':
                    System.out.print("ba");
                    break;
                case '9':
                    System.out.print("jiu");
                    break;
                default:
                    System.out.print("fu");
                    break;
                }
                if (i < a.length - 1) {     //防止首尾出现空格
                    System.out.print(" ");
                }
            }
        }
    }
    
    image.png

    切记:输出的拼音首和尾没有空格

    5.给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int A = sc.nextInt();
            int B = sc.nextInt();
            int Sum = 0;
            int t = 0;
            t = B - A;
            for (int i = 0; i <= t; i++) {
                if (i % 5 == 0 && i != 0) {
                    System.out.print("\n");
                }
                int k = A++;
                System.out.print(String.format("%5d", k));  //让 k 输出的字符占五个空格字符
                Sum = Sum + k;
            }
            System.out.print("\nSum = " + Sum);
        }
    }
    

    输出:


    image.png

    6.本题要求将输入的任意3个整数从小到大输出。

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            int a = s.nextInt();
            int b = s.nextInt();
            int c = s.nextInt();
            int k2 = 0, k3 = 0;
            int k1 = Math.max(c, Math.max(a, b));     //三个数比较大小
            if (k1 == a) {
                k2 = Math.max(b, c);
                if (k2 == b) {
                    k3 = c;
                } else {
                    k3 = b;
                }
            }
            if (k1 == b) {
                k2 = Math.max(a, c);
                if (k2 == a) {
                    k3 = c;
                } else {
                    k3 = a;
                }
            }
            if (k1 == c) {
                k2 = Math.max(b, a);
                if (k2 == b) {
                    k3 = a;
                } else {
                    k3 = b;
                }
            }
            System.out.println(k3 + "->" + k2 + "->" + k1);
        }
    }
    

    Math.max(a, b) 比较a,b大小的函数

    7.Java 拆分字符串的方法

    split() 方法根据匹配给定的正则表达式来拆分字符串。

    例如:

    String[] b = a.split(":");
    

    注意: . 、 | 和 * 等转义字符,必须得加 \。

    注意:多个分隔符,可以用 | 作为连字符

    8.将字符串类型转化为整型的操作

    parseInt()方法用于将字符串参数作为有符号的十进制整数进行解析。
    例如:

    int x =Integer.parseInt("9");          // 9
    double c = Double.parseDouble("5");    //5.0
    
    9.输出值前面要带0
    printf("%02d" ,3)       //%02d   整数不够2列就补上0
    
    10.微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            String a = s.nextLine();
            String[] b = a.split(":");
            int h = Integer.parseInt(b[0]);
            int m = Integer.parseInt(b[1]);
            int time = 0;
            if (h >12) {
                if (m == 0) {
                    time = h - 12;
                } else {
                    time = h - 11;
                }
                for (int i = 0; i < time; i++) {
                    System.out.print("Dang");
                }
            } else {
                System.out.print(String.format("Only %02d:%02d.  Too early to Dang.\n", h, m));   
               //如果整数不够2列就补上0 比如 printf("%02d" ,3)
            }
        }
    }
    

    7.据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

    二维数组

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            int a = s.nextInt();
            int myarr[][] = new int[a][2];   //二维数组的定义
            double sum = 0;
            for (int i = 0; i < a; i++) {
                for (int j = 0; j < 2; j++) {
                    myarr[i][j] = s.nextInt();
                }
            }
            for (int i = 0; i < a; i++) {
                sum = 2 * ((myarr[i][0] - 100) * 0.9);
                if (Math.abs(myarr[i][1] - sum) < 0.1 * sum) {
                    System.out.println("You are wan mei!");
                } else if ((myarr[i][1] - sum) >= 0.1 * sum) {
                    System.out.println("You are tai pang le!");
                } else {
                    System.out.println("You are tai shou le!");
                }
                sum = 0;
            }
        }
    }
    

    8.强制类型转换

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            int a = s.nextInt();
            int b = s.nextInt();
            double sum = 0;
    
            if (b > 0) {
                sum = (double) a / b;   //让整型相除变为浮点型
                System.out.printf(a + "/" + b + "=" + "%.2f", sum);
            }
            if (b < 0) {
                sum = (double) a / b;
                System.out.printf(a + "/(" + b + ")=" + "%.2f", sum);
            }
            if (b == 0) {
                System.out.println(a + "/" + b + "=Error");
            }
        }
    }
    

    9.大坑(Java的Scanner输入时,next()和nextLine()的区别)

    首先是大家共所周知的区别

    nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

    next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串

    接下来是重头戏

    next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

    nextLine()方法的结束符只是Enter键

    所以

    nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。

    10.出生年

    HashSet<Integer> set = new HashSet<Integer>();

    关于HashSet的各种使用方法总结:
    https://blog.csdn.net/jinqianwang/article/details/80030060

    从一个数据中找出有几个不同的数,这是一个泛型的写法,表示 这个集合中只能保存 integer 类型的对象,其他对象无法保存,

    // HashSet是set接口的实现类,也是我们最常用的set集合储存的是无序,唯一的对象
    // HashSet是是使用equals来进行对象对比,确定数据是唯一的

    image.png
    import java.util.HashSet;  // 导入 HashSet 包
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner s = new Scanner(System.in);
            String r = s.nextLine();
            String[] input = r.split(" ");
            int y = Integer.parseInt(input[0]);
            int n = Integer.parseInt(input[1]);
            for (int i = y;; i++) {
                // HashSet是set接口的实现类,也是我们最常用的set集合储存的是无序,唯一的对象
                HashSet<Integer> set = new HashSet<Integer>(); 
                int num = i;
                for (int j = 0; j < 4; j++) {
                    // HashSet 的 add 方法不能加重复值
                    set.add(num % 10); // set内的元素不重复.
                    num /= 10; // 算出每一位的数字的大小.
                }
                // 当set的大小等于n的时候
                if (set.size() == n) {
                    System.out.printf("%d %04d", i - y, i);
                    break;
                }
            }
        }
    }
    
    

    11.个位数统计

    如何把字符串中的某个字符转为整型

    -48 或者 -'0'

    image.png
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner s = new Scanner(System.in);
            String shu = s.next();
            int[] n = new int[10];
            for (int i = 0; i < shu.length(); i++) {
            //用数组的 i 存放数字,第  i 个数组的值存放这个 i 出现的次数
                n[shu.charAt(i) - 48]++;    //单个字符型转为整型 -48 或者 -'0'
            }
            for (int i = 0; i < n.length; i++) {
                if (n[i] != 0) {
                    System.out.println(i+":" +n[i]);
                }
            }
        }
    }
    

    12.字符串拆分赋值给字符数组

    char[] c = n.toCharArray(); // n是字符串数组,c 是字符型数组
    

    13.把整型变为字符串类型

         int i = 0;
        
         String s = String.valueOf(i);
    
        String s = Integer.toString(i);
    
         String s = "" + i;
    

    相关文章

      网友评论

          本文标题:JAVA 天梯赛 (难点)

          本文链接:https://www.haomeiwen.com/subject/fttyuqtx.html