JAVA 天梯赛 (难点)

2019-03-02  本文已影响0人  定格r

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;
上一篇下一篇

猜你喜欢

热点阅读