天天看點

藍橋杯算法訓練(java)--Anagrams問題&&字首表達式&&大小寫轉換

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),然後把這個字元串内的每一個字元進行大小寫變換,即将大寫字母變成小寫,小寫字母變成大寫,然後把這個新的字元串輸出。

  輸入格式:輸入一個字元串,而且這個字元串當中隻包含英文字母,不包含其他類型的字元,也沒有空格。

  輸出格式:輸出經過轉換後的字元串。

思路:

藍橋杯算法訓練(java)--Anagrams問題&amp;&amp;字首表達式&amp;&amp;大小寫轉換

用字元串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);
	}
}