宗介拾忆


私信TA

用户名:dotcpp0751481

访问量:186

签 名:

世间遗憾,皆是温柔......

等  级
排  名 21684
经  验 666
参赛次数 6
文章发表 1
年  龄 19
在职情况 学生
学  校 武昌职业学院
专  业 移动互联应用技术

  自我简介:

我也想成为某个人的全世界,可我是张三是李四,是芸芸众生里的普通人......

解题思路:


先将封闭图形个数计算出来(sum),再看题目数据(小于1000000000,所以sum最大也就18),于是我们有个奇妙思路:创建一个long类型的一维数组a,里面存入long类型的数据:sum*1000000000+ai(用户输入的数字),然后Arrays.sort(a)排个序,最后for循环输出“a[i]%1000000000”。检查一下,30行代码,完美解决!

这个方法省时还省力,不仅如此,它还可以运用到其他多个参数类型的题目上(比如给你一堆学生数据,然后按照“成绩-准考证”的优先级排序,诸如此类的题目...如果遇上数据太大或者数据类型过杂(int或者long 与 String —— 数字与字符串的混用),那么我们可以用String字符串类型去解决这个问题,因为String也可以排序!总之,这个方法很简单,并且代码量少,出BUG概率小!)


注意事项:

由于我的sum是long类型,所以我后面写的是“sum*1000000000+Integer.parseInt(s)”,如果你们用int类型,记得加上强转哦,否则最后输出会有问题的!“a[i]=((long)sum)*1000000000+Integer.parseInt(s);”

参考代码:

import java.util.Arrays;

import java.util.Scanner;


public class Main {


        public static void main(String[] args) {

            Scanner sc=new Scanner(System.in);

            int n=sc.nextInt();

            long[] a=new long[n];

            for (int i = 0; i < a.length; i++) {

                String s=sc.next();

                long sum=0L;

                for (int j = 0; j < s.length(); j++) {

                    if(s.charAt(j)=='4' || s.charAt(j)=='6' || s.charAt(j)=='9' || s.charAt(j)=='0') {

                        sum++;

                    }else if(s.charAt(j)=='8') {

                        sum=sum+2;

                    }

                }

                a[i]=sum*1000000000+Integer.parseInt(s);

            }

            Arrays.sort(a);

            for (int i = 0; i < a.length; i++) {

                System.out.print(a[i]%1000000000);

                if(i != a.length-1) {

                    System.out.print(" ");

                }

            }

        }

}


 

0.0分

3 人评分

  评论区

  • «
  • »