安卓开发及安全交流QQ群:838650234,感兴趣的可以加群。
最大的感受就是杭电OJ类型检查真严格,需要多写代码练手。
1720题:
import java.util.Scanner;
public class Main {
//注意自己找API
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
while(sc_01.hasNext()){
String num_1 = sc_01.next();
String num_2 = sc_01.next();
int num_01 = Integer.parseInt(num_1,16);
int num_02 = Integer.parseInt(num_2,16);
System.out.println(num_01+num_02);
}
}
}
1062题:
自己写的:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
// while (sc_01.hasNext() && sc_02.hasNext()) {
//使用一个对象无法同时初始化nextInt()和nextLine();
int line = sc_01.nextInt();
sc_01.nextLine();
//输出的字符串
//***nextLine()可以输入带空格字符串,next()不可以。
String[] old_String = new String[line];
String[] result = new String[line];
//输入字符串
for (int i = 0; i < line; i++) {
old_String[i] = sc_01.nextLine();
}
for (int i = 0; i < line; i++) {
//使用Split对字符串进行切割。
String[] split = old_String[i].split(" ");
result[i] = new String();
for (int j = 0; j < split.length - 1; j++) {
//对字符串做分割
split[j] = reverse(split[j]);
result[i] += (split[j] + " ");
}
result[i] += (reverse(split[split.length - 1]));
int num_02 = old_String.length-result[i].length();
for(int j = 0;j<num_02;j++){
result[i]+=" ";
}
}
for (int i = 0; i < line; i++) {
System.out.println(result[i]);
}
}
private static String reverse(String s) {
String backString = new String();//不要使用null来初始化,使用new String来初始化。
if (s.equals(" ")) {
return " ";
} else {
for (int i = s.length() - 1; i >= 0; i--) {
backString += String.valueOf(s.charAt(i));
}
return backString;
}
}
}
一直显示PE,别人的代码:
import java.util.*;
public class acm1062 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num = input.nextInt();
input.nextLine();
String[] string = new String[num];
for (int i = 0; i < num; i++) {
string[i] = input.nextLine();
}
String[] result = new String[num];
for (int i = 0; i < num; i++) {
String[] str = string[i].split(" "); //分割字符串
result[i] = stringReverse(str[0]);
for (int j = 1; j < str.length; j++) {
result[i] = result[i] + " " + stringReverse(str[j]);
}
//末尾空格加上
int n = string[i].length() - result[i].length();
for (int j = 0; j < n; j++) {
result[i] += " ";
}
}
for (int i = 0; i < num; i++) {
System.out.println(result[i]);
}
}
//翻转单词字母
public static String stringReverse(String str) {
if (str.equals("")) {
return "";
} else {
String string = String.valueOf(str.charAt(str.length() - 1));
for (int i = str.length() - 2; i >= 0; i--) {
string += String.valueOf(str.charAt(i));
}
return string;
}
}
}
2104题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
while (sc_01.hasNext()) {
int People_num = sc_01.nextInt();//初始人数
int Initia_val = sc_01.nextInt();//间隔数
//如果输入均为-1的话。则退出,else
if (People_num == -1 && Initia_val == -1) {
break;
} else {
//判断两者的最大公约数是不是等于1
int test_result = gcd(People_num, Initia_val);
if (test_result == 1) {
System.out.println("YES");
} else {
System.out.println("POOR Haha");
}
}
}
}
private static int gcd(int people_num, int initia_val) {
if(initia_val == 0){
return people_num;
}else{
return gcd(initia_val,people_num%initia_val);
}
}}
1064题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
while (sc_01.hasNext()) {
int month = 12;
double[] monthvalue = new double[month];
double totalResult= 0;
for (int i = 0; i < month; i++) {
monthvalue[i] = sc_01.nextDouble();
totalResult +=monthvalue[i];
}
double aver_val = totalResult/12.0;
System.out.println("$"+String.format("%.2f",aver_val));
}
}
}
2734题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
while (sc_01.hasNext()) {
String newString = sc_01.nextLine();
int result = 0;
if (!newString.equals("#")) {
int[] bytesString = new int[newString.length()];
for (int i = 0; i < bytesString.length; i++) {
bytesString[i] = newString.charAt(i);
if(bytesString[i] > 96){
bytesString[i] -= 96;
}else if(bytesString[i] == 32){
bytesString[i] = 0;
}else{
bytesString[i]-=64;
}
result+=(bytesString[i]*(i+1));
}
System.out.println(result);
} else {
break;
}
}
}
}
1170题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
// Scanner sc_02 = new Scanner(System.in);
//杭电OJf***k,只能有一个输入,不能有两次初始化,谢谢。
int line_num = sc_01.nextInt();
sc_01.nextLine();
for (int i = 0; i < line_num; i++) {
String test_str = sc_01.nextLine();
String[] test_cahr = test_str.split(" ");
int lefft_op = Integer.parseInt(test_cahr[1]);
int right_op = Integer.parseInt(test_cahr[2]);
if (test_cahr[0].equals("+")) {
System.out.println(lefft_op + right_op);
} else if (test_cahr[0].equals("-")) {
System.out.println(lefft_op - right_op);
} else if (test_cahr[0].equals("*")) {
System.out.println(lefft_op * right_op);
} else {
if (lefft_op % right_op == 0) {
System.out.println(lefft_op / right_op);
} else {
System.out.println(String.format("%.2f", (double) lefft_op / right_op));
}
}
}
}
}
1197题:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
for(int num = 2991;num<10000;num++){
//计算十进制下的和。
int result_10 = num/1000+num%1000/100+num%1000%100/10+num%1000%100%10;
//将十进制转成十六进制。
String result_01 = Integer.toHexString(num);
//计算十六进制的和
int result_16 = 0;
for(int i = 0 ;i<result_01.length();i++){
//获得该位数的值
switch(String.valueOf(result_01.charAt(i))){
case "a":
result_16 += 10;break;
case "b":
result_16 += 11;break;
case "c":
result_16 += 12;break;
case "d":
result_16 += 13;break;
case "e":
result_16 += 14;break;
case "f":
result_16 += 15;break;
default:
result_16 += Integer.parseInt(String.valueOf(result_01.charAt(i)));
break;
}
}
//十二进制的字符串
int result_12 = num/1728+num%1728/144+num%1728%144/12+num%1728%144%12;
//判断结果输出。
if(result_10 == result_12&& result_10 == result_16){
System.out.println(num);
}
}
}
}
2629题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
int lin_num = sc_01.nextInt();
for (int i = 0; i < lin_num; i++) {
//输入用户身份证ID。
String Cer_ID = sc_01.next();
int region_ID = Integer.parseInt(Cer_ID.substring(0, 2));
// int year_ID = Integer.parseInt(Cer_ID.substring(6, 10));
// int month_ID = Integer.parseInt(Cer_ID.substring(10, 12));
// int day_ID = Integer.parseInt(Cer_ID.substring(12, 14));
String result1 = new String();
switch (region_ID) {
case 33:
result1 = "Zhejiang";
break;
case 11:
result1 = "Beijing";
break;
case 71:
result1 = "Taiwan";
break;
case 81:
result1 = "Hong Kong";
break;
case 82:
result1 = "Macao";
break;
case 54:
result1 = "Tibet";
break;
case 21:
result1 = "Liaoning";
break;
case 31:
result1 = "Shanghai";
break;
}
//杭电OJ输出检查太严格了吧,如果是截取字符串就是对的,如果是截取的字符串转成int类型输出就报错,
System.out.println("He/She is from "+result1 + ",and his/her birthday is on " +
Cer_ID.substring(10, 12) + "," + Cer_ID.substring(12, 14) + "," + Cer_ID.substring(6, 10) + " based on the table.");
}
}
}