很长时间没写JAVA,手生了,用JAVA字符串简单练练一些入门题。
1.洛谷P1125
import java.util.*;
public class Main{
public static boolean isprime(int n){
if(n<2) return false;
for(int i=2;i*i<=n;i++) if(n%i==0) return false;
return true;
}
public static void main(String args[]){
Map<Character,Integer> cnt=new HashMap<Character,Integer>();
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
int minn=0x3f3f3f3f,maxn=0;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
int tmp=cnt.getOrDefault(c,0)+1;
cnt.put(c,tmp);
}
for(Integer v: cnt.values()){
minn=Integer.min(minn,v);
maxn=Integer.max(maxn,v);
}
if(isprime(maxn-minn)){
System.out.println("Lucky Word");
System.out.println(maxn-minn);
}
else{
System.out.println("No Answer");
System.out.println(0);
}
}
}
2.洛谷P1957
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
scanner.nextLine();//吸收回车
int a,b;
char c=' ';
for(int i=0;i<n;i++){
String s=scanner.nextLine();
String ss[]=s.split(" ");
if(ss.length==3){
c=ss[0].charAt(0);
a=Integer.parseInt(ss[1]);
b=Integer.parseInt(ss[2]);
}
else{
a=Integer.parseInt(ss[0]);
b=Integer.parseInt(ss[1]);
}
if(c=='a'){
s=Integer.toString(a)+"+"+Integer.toString(b)+"="+Integer.toString(a+b);
System.out.println(s);
System.out.println(s.length());
}
else if(c=='b'){
s=Integer.toString(a)+"-"+Integer.toString(b)+"="+Integer.toString(a-b);
System.out.println(s);
System.out.println(s.length());
}
else{
s=Integer.toString(a)+"*"+Integer.toString(b)+"="+Integer.toString(a*b);
System.out.println(s);
System.out.println(s.length());
}
}
}
}
这个题用 JAVA 还是很方便的,但是要注意吸收回车的问题
nextline 会读入 next 残留的回车,而 nextline 本身不会残留回车
3.洛谷P1308
import java.util.*;
public class Main{
static String s1,s2;
static int cnt,pos;
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
s1=scanner.nextLine().toLowerCase(Locale.ROOT);
s2=scanner.nextLine().toLowerCase(Locale.ROOT);
String ss[]=s2.split(" ");
for(int i=0;i<ss.length;i++){
if(s1.equals(ss[i])) cnt++;
if(cnt==0) pos+=ss[i].length()+1;
}
if(cnt==0) System.out.println(-1);
else System.out.println(cnt+" "+pos);
}
}
有 split 就是舒服,这道题用 JAVA 鬼知道简单了多少
4.洛谷P1553
import java.util.*;
public class Main{
static String s;
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
s=scanner.next();
if(s.contains(".")){
String ss[]=s.split("\\.");
String s1=ss[0],s2=ss[1];
s1=String.valueOf(Long.parseLong(new StringBuffer(s1).reverse().toString()));
s2=String.valueOf(Long.parseLong(s2));
s2=String.valueOf(Long.parseLong(new StringBuffer(s2).reverse().toString()));
System.out.println(s1+"."+s2);
}
else if(s.contains("/")){
String ss[]=s.split("/");
String s1=ss[0],s2=ss[1];
s1=String.valueOf(Long.parseLong(new StringBuffer(s1).reverse().toString()));
s2=String.valueOf(Long.parseLong(new StringBuffer(s2).reverse().toString()));
System.out.println(s1+"/"+s2);
}
else if(s.contains("%")){
s=s.substring(0,s.length()-1);
s=String.valueOf(Long.parseLong(new StringBuffer(s).reverse().toString()));
System.out.println(s+"%");
}
else{
s=String.valueOf(Long.parseLong(new StringBuffer(s).reverse().toString()));
System.out.println(s);
}
}
}
这个题由于有了 parseint,写起来非常舒服
但是注意审题,那个长度得用 long
然后实际上如果长度太长还是得该怎么模拟还怎么模拟。。。
这里需要注意的是 JAVA 中的正则表达式是 字符串到正则表达式
正则中,点.表示任意字符
这里我们想匹配的是点.这个字符,所以我们要转义,即正则表达式是 \.
而 JAVA 中是从字符串转到正则
也就是说你想要表达?\. 这个正则表达式,你就需要写 \\. 这个字符串
|