- 这题卡了很久,虽然是简单的题,但对于Java的新手来说主要的难点在两个方面:
- 输入输出处理,即 hasNext(), hasNextLine(), hasNextInt() 这些放到 while 循环里究竟意味着什么
- Java中一些便捷函数的使用,即 split(), valueOf() 以及List, ArrayList, Collection 之间的相互关系
- hasNext() 判断下一个输入是否为空字符,空字符指 空格‘ ’、字符串结尾‘\0'
- hasNextLine() 判断下一个输入是否为空字符串,空字符串指 “”
- split() 用括号内的字符分割字符串,其中牵涉到正则表达式,若要分割不确定有几个空格或Tab键的字符串,可用String.spilt("\\s+"),而不使用String.split(" ")
- valueOf() 和parseInt() 用法相似,不过valueOf() 返回Integer对象,parseInt() 返回int,而且二者在字符串后加整数,即可把整数的进制转换为10进制
- Collection是个接口(常用作集合用),它下面有两个子接口分别为(1)List(2)Set
其中List是有序可重复集,set是无序不可重复集。
List又分为三类(1)ArrayList(2)LinkList(3)Vector
ArrayList内部由数组实现,适合查询;
LinkList内部由链表实现,适合增删改。
Vector几乎用不到
Set又分为(1)HashSet(2)treeSet
treeSet是二叉树,有序的
HashSet采用散列存储,是无序的。
另外Collection是集合的接口 ,Collections是集合的工具类
以下是忽略n也不管几个空格,直接用nextInt输入的最简单的AC代码,用了冒泡排序
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
int n=in.nextInt();
in.nextLine();
int []arr=new int[10005];
int i=0;
while(in.hasNextInt()){
int x=in.nextInt();
arr[i++]=x;
}
for(int j=0;j<i;j++){
for(int k=j+1;k<i;k++){
if(arr[j]>arr[k]){
int temp=arr[j];
arr[j]=arr[k];
arr[k]=temp;
}
}
}
int tm=-1,tn=-1;
for(int j=0;j<i;j++){
if(arr[j]==arr[j+1]){
tn=arr[j];
}
if(arr[j]+2==arr[j+1]){
tm=arr[j]+1;
}
}
System.out.println(tm+" "+tn);
}
}
以下是网上找的代码,可我测试的不确定的多个空格的输入程序崩了,而每个数中间间隔一个空格的输入是完全正确的,提交的结果是100分
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] s = new String[n];
String[][] s1 = new String[n][];
in.nextLine();
for(int i=0; i<n; i++) {
s[i] = in.nextLine();
s1[i] = s[i].split(" ");
}
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i<n; i++)
for(int j=0; j<s1[i].length; j++) {
list.add(Integer.valueOf(s1[i][j]));
}
Collections.sort(list);
int a=0,b=0;
for(int i=0; i<list.size()-1; i++) {
if(list.get(i+1)-list.get(i)==0) {
a = list.get(i);
}
if(list.get(i+1)-list.get(i)==2) {
b = list.get(i)+1;
}
}
System.out.println(b+" "+a);
}
}
下面是提交结果50分的代码,第二个测试点没过,因为没有VIP,看不到第二组数据,如果有第二组数据的希望可以到评论区评论,还有,如果有发现我代码问题的也欢迎在评论区赐教,不甚感激~~
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine();
ArrayList<Integer> al = new ArrayList<Integer>();
while(n-->0){
String rid=in.nextLine();//每一行的id号
String[] allid=rid.split(" ");//把行id通过空格分割开
for(int i=0;i<allid.length;i++){
if(allid[i].equals(""))//如果分割后是空字符串,即出现连续空格
continue;
int id=Integer.parseInt(allid[i]);//如果非空字符串,则转为整数,加入al
al.add(id);
}
}
Collections.sort(al);
int a=0,b=0;
for(int i=0; i<al.size()-1; i++) {
if(al.get(i+1)-al.get(i)==0) {
a = al.get(i);
}
if(al.get(i+1)-al.get(i)==2) {
b = al.get(i)+1;
}
}
System.out.println(b+" "+a);
}
}