解题思路:
先将封闭图形个数计算出来(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 人评分
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:1077 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1055 |
printf基础练习2 (C语言代码)浏览:801 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:757 |
C二级辅导-计负均正 (C语言代码)浏览:607 |
C语言训练-大、小写问题 (C语言代码)浏览:792 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5274 |
printf基础练习2 (C语言代码)浏览:690 |
简单的a+b (C语言代码)浏览:661 |
简单的a+b (C语言代码)浏览:878 |