Anagrams問題
Anagrams指的是具有如下特性的兩個單詞:在這兩個單詞當中,每一個英文字母(不區分大小寫)所出現的次數都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。編寫一個程式,輸入兩個單詞,然後判斷一下,這兩個單詞是否是Anagrams。每一個單詞的長度不會超過80個字元,而且是大小寫無關的。
輸入格式:輸入有兩行,分别為兩個單詞。
輸出格式:輸出隻有一個字母Y或N,分别表示Yes和No
思路:可以利用
map
存儲每個字元和其出現的次數。然後比較兩個
map
的内容。
細節注意:大小寫是無關的,是以我們可以先将字元串轉化成小寫的。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
String s1=scn.next();
String s2=scn.next();
if(s1.length()==s1.length())
{
Map<Character,Integer> map1=new HashMap<Character,Integer>();
Map<Character,Integer> map2=new HashMap<Character,Integer>();
s1=s1.toLowerCase();
s2=s2.toLowerCase();
for (int i = 0; i < s1.length(); i++) {
if(map1.containsKey(s1.charAt(i)))
{
Integer in=map1.get(s1.charAt(i));
in=in+1;
}
else {
map1.put(s1.charAt(i), 1);
}
if(map2.containsKey(s2.charAt(i)))
{
Integer inn=map2.get(s2.charAt(i));
inn=inn+1;
}
else {
map2.put(s2.charAt(i), 1);
}
}
if(map1.equals(map2))
System.out.println("Y");
else
System.out.println("N");
}
else {
System.out.println("N");
}
}
}
字首表達式
編寫一個程式,以字元串方式輸入一個字首表達式,然後計算它的值。
輸入格式為:“運算符 對象1 對象2”。
運算符為“+”(加法)、“-”(減法)、“*”(乘法)或“/”(除法),運算對象為不超過10的整數,它們之間用一個空格隔開。
要求:對于加、減、乘、除這四種運算,分别設計相應的函數來實作。
輸入格式:輸入隻有一行,即一個字首表達式字元串。
輸出格式:輸出相應的計算結果(如果是除法,直接采用c語言的“/”運算符,結果為整數)。
思路: 這道題不難,主要記住如何在字元串中擷取數字。
可以利用Character.isDigit()判斷是不是數字。
另外,由于它的輸入是有空格隔開的,是以擷取字元串時不能使用
scn.next()
,而是要使用
scn.nextLine()
.
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
String s = scn.nextLine();//會在輸入enter的時候停止。而scn.next()會在輸入空格的時候停止。
int num1 = Integer.parseInt(s.substring(2, 3));
int num2 = 0;
for (int i = 3; i < s.length(); i++) {
while (Character.isDigit(s.charAt(i))) {
num1 = num1 * 10 + Integer.parseInt(s.substring(i, i + 1));
i++;
}
i++;
num2 = Integer.parseInt(s.substring(i, i + 1));
i++;
while (i < s.length() && Character.isDigit(s.charAt(i))) {
num2 = num2 * 10 + Integer.parseInt(s.substring(i, i + 1));
i++;
}
}
if (s.charAt(0) == '+')
System.out.println(num1 + num2);
else if (s.charAt(0) == '-')
System.out.println(num1 - num2);
else if (s.charAt(0) == '*')
System.out.println(num1 * num2);
else if (s.charAt(0) == '/')
System.out.println(num1 / num2);
}
}
另外一種方法:在比賽中觀察輸入和輸出格式的特點很重要!
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
char c=scn.next().charAt(0);
int a,b,sum;
a=scn.nextInt();
b=scn.nextInt();
if(c=='+')
System.out.println(a+b);
else if(c=='-')
System.out.println(a-b);
else if(c=='*')
System.out.println(a*b);
else if(c=='/')
System.out.println(a/b);
}
大小寫轉換
編寫一個程式,輸入一個字元串(長度不超過20),然後把這個字元串内的每一個字元進行大小寫變換,即将大寫字母變成小寫,小寫字母變成大寫,然後把這個新的字元串輸出。
輸入格式:輸入一個字元串,而且這個字元串當中隻包含英文字母,不包含其他類型的字元,也沒有空格。
輸出格式:輸出經過轉換後的字元串。
思路:
用字元串S1用于存儲原字元串S大寫的結果。
用字元串S2用于存儲原字元串S小寫的結果。
用字元串res用于存儲結果。
周遊s中每個字元,如果s中字元和s1中的字元相同,則說明s中的字元是大寫的,那麼我們把它改成小寫的,即把s2中該處的字元添加到res中。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
String s=scn.next();
String s1=s.toUpperCase();
String s2=s.toLowerCase();
String res="";
for (int i = 0; i < s.length(); i++) {
if(s.substring(i, i+1).equals(s1.substring(i, i+1)))
res+=s2.substring(i, i+1);
else
res+=s1.substring(i, i+1);
}
System.out.println(res);
}
}