1. 程式人生 > >【java練習】SDUT 實驗四之常用類

【java練習】SDUT 實驗四之常用類

述:

1.這個實驗涉及到:Date類,String類(str.toCharArray()字串轉陣列;a=a.replace(in1, out1);字串替換),Integer類(Integer.parseInt(t[0])字元轉數字,BigInteger類(=new BigInteger(str1);大數加減)。

2.紅色代表這題不會

A 2246 時間日期格式轉換

對於日期的常用格式,在中國常採用格式的是“年年年年/月月/日日”或寫為英語縮略表示的”yyyy/mm/dd”,此次程式設計競賽的啟動日期“2010/11/20”就是符合這種格式的一個日期,而北美所用的日期格式則為“月月/日日/年年年年”或”mm/dd /yyyy”,如將“2010/11/20”改成這種格式,對應的則是”11/20/2010”。對於時間的格式,則常有12小時制和24小時制的表示方法,24小時制用0-24來表示一天中的24小時,而12小時制只採用1-12表示小時,再加上am/pm來表示上午或下午,比如”17:30:00”是採用24小時制來表示時間,而對應的12小時制的表示方法是”05:30:00pm”。注意12:00:00pm表示中午12點,而12:00:00am 表示凌晨12點。

對於給定的採用”yyyy/mm/dd”加24小時制(用短橫線”-”連線)來表示日期和時間的字串,請程式設計實現將其轉換成”mm/dd/yyyy”加12小時制格式的字串。

import java.text.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws ParseException {
		Scanner s=new Scanner(System.in);
		Date d=null;
		int n=s.nextInt();
		//s.next();
		while(n-->0)
		{
			String a=s.next();
			SimpleDateFormat in=new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
			SimpleDateFormat out=new SimpleDateFormat("MM/dd/yyyy-hh:mm:ssa",new Locale("US"));
			d=in.parse(a);
			a=out.format(d);
			System.out.println(a.toLowerCase());
		}
	}
}

B 2445 小學數學

其中每道算術題的格式為a+b=c、a-b=c、a+b=?、a-b=? 中的一種,最後的問號表示這個小朋友不會計算這道題。在檢查作業的過程中,大寶發現他經常算錯題目而且會數錯個數。所以他想請你幫忙寫個程式來統計小朋友做對題目的個數。


import java.lang.reflect.Array;
import java.text.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws ParseException {
		Scanner s = new Scanner(System.in);
		int cnt = 0;
		while (s.hasNext()) {
			String str = s.nextLine();
			char[] a = str.toCharArray();
			int f = 0;
			if (a[str.length() - 1] != '?')
			{
				for (int i = 0; i <= str.length(); i++) {
					if (a[i] == '-') {
						f = 1;
						break;
					}
					if (a[i] == '+') {
						f = 2;
						break;
					}
				}
				String t[] = str.split("\\+|-|=");
				int x = Integer.parseInt(t[0]);
				int y = Integer.parseInt(t[1]);
				int z = Integer.parseInt(t[2]);
				if (f == 1 && x - y == z)
					cnt++;
				else if (f == 2 && x + y == z)
					cnt++;
			}
		}
		System.out.println(cnt);
	}
}

C  2787 加密術

給定加密前和加密後的字串,判斷從加密後的字串中刪除若干個字元後剩下的字串是否可以拼接成加密前的字串。

import java.lang.reflect.Array;
import java.text.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws ParseException {
		Scanner s = new Scanner(System.in);
		while(s.hasNext())
		{
			String str1=s.next();
			String str2=s.next();
			char a[]=str1.toCharArray();
			char b[]=str2.toCharArray();
			int i=0,j=0;
			while(i<str1.length()&&j<str2.length())
			{
				if(a[i]==b[j])
				{
					i++;
					j++;
				}
				else j++;
			}
			if(i==str1.length())
				System.out.println("Yes");
			else System.out.println("No");
		}
	}
}

D 2192 救基友記
 給你一個字串s,長度小於1000,讓你找出該字串所包含的所有子串"cRazY" 或者"CraZy",並將找出的子串的大寫字母變成小寫字母,小寫字母變成大寫字母,然後輸出該字串。

import java.lang.reflect.Array;
import java.text.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws ParseException {
		Scanner s = new Scanner(System.in);
		int t=s.nextInt();
		while(t-->0)
		{
			String a=s.next();
			String in1="cRazY";
			String in2="CraZy";
			String out1="CrAZy";
			String out2="cRAzY";
			a=a.replace(in1, out1);
			a=a.replace(in2, out2);
			System.out.println(a);
		}
	}
}

E 2271 Eddy的難題

給定兩個字串s1和s2,如果能通過s1迴圈移位,使s2包含在s1中,那麼我們就說s2 是s1的親和串。

import java.lang.reflect.Array;
import java.text.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws ParseException {
		Scanner s = new Scanner(System.in);
		while(s.hasNext())
		{
			String a=s.next();
			String b=s.next();
			String x=a+a;
			if(a.length()<b.length())
				System.out.println("no");
			else if(x.contains(b))
				System.out.println("yes");
			else
				System.out.println("no");
		}
	}
}

 F 2784 Good Luck!

尋找最大子串。要求:是原字串的字首字尾和中間的一部分。

import java.util.*;

public class Main {
	static int[] next = new int[1000001];

	static void getNext(String s) {
		int j = -1;
		next[0] = -1;
		for (int i = 1; i < s.length(); i++) {
			while (j != -1 && s.charAt(i) != s.charAt(j + 1))
				j = next[j];
			if (s.charAt(i) == s.charAt(j + 1))
				j++;
			next[i] = j;
		}
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		while (n-- > 0) {
			String str = in.next();
			getNext(str);
			int len = str.length();
			if (next[len - 1] == -1 || len < 3)
				System.out.println("Bad Luck!");
			else {
				int l = len - 1;
				boolean res = false;
				while (next[l] != -1) {
					if (str.indexOf(str.substring(0, next[l] + 1), 1) != len - 1 - next[l]) {
						System.out.println(str.substring(0, next[l] + 1));
						res = true;
						break;
					}
					l = next[l];
				}
				if (!res)
					System.out.println("Bad Luck!");
			}
		}
	}
}

G 1916 字串擴充套件 

擴充套件:a-c變成abc 。要求是隻處理[a-z]、[A-Z]、[0-9]範圍內的字元擴充套件,即只有當擴充套件符前後的字元同時是小寫字母、大寫字母或數字時並且擴充套件符前面的字元不大於後面的字元才進行擴充套件,其它情況不進行擴充套件,原樣輸出。

Sample Input
3
ADEa-g-m02
acm-0-5-a-ac-cm-m-A-AC-CM-M
Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z
Sample Output
ADEabcdefghijklm02
acm-012345-aaccmm-AACCMM
Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
		s.nextLine();
		while (n-- > 0) {
			String str=s.nextLine();
			char[] a=str.toCharArray();
			for(int i=0;i<str.length();i++)
			{
				if(a[i]=='-'&&i>0&&i<str.length()-1)
				{
					if((a[i-1]>='a'&&a[i+1]<='z')||(a[i-1]>='A'&&a[i+1]<='Z')||(a[i-1]>='0'&&a[i+1]<='9'))
					{
						if(a[i-1]<=a[i+1])
						{
							char c=(char)(a[i-1]+1);
							while(c<a[i+1])
									{
										System.out.print(c);
										c=(char)(c+1);
									}
						}
						else System.out.print(a[i]);
					}
					else System.out.print(a[i]);
				}
				else System.out.print(a[i]);
			}
			System.out.println();
		}
	}
}

 H 2279驕傲的代價

大數a+b

import java.math.BigInteger;
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
		s.nextLine();
		for(int i=1;i<=n;i++) {
			String str1=s.next();
			String str2=s.next();
			BigInteger a=new BigInteger(str1);
			BigInteger b=new BigInteger(str2);
			BigInteger sum=a.add(b);
			System.out.println("Case "+i+":\n"+a+"+"+b+"="+sum);
		}
	}
}