安卓开发及安全交流QQ群:838650234,感兴趣的可以加群。
1995题:
import java.util.*;
public class Main {
public static int counting = 0;
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
int line_num = sc_01.nextInt();
for(int i = 0;i<line_num;i++){
int all_plate = sc_01.nextInt();
int point_plate = sc_01.nextInt();
Stack<Integer> a_pillar = new Stack<Integer>();
Stack<Integer> b_pillar = new Stack<Integer>();
Stack<Integer> c_pillar = new Stack<Integer>();
for(int j=all_plate;j>0;j--){
a_pillar.push(j);
}
//从a移动到c,以b为辅助。
move(all_plate,a_pillar,b_pillar,c_pillar,point_plate);
System.out.println(counting);
}
}
//但时间复杂度太大,递归本来就大,故而寻找其中规律。
private static void move(int all_plate, Stack<Integer> a_pillar, Stack<Integer> b_pillar, Stack<Integer> c_pillar,int point_plate) {
if(all_plate == 0 ) return;
move(all_plate-1,a_pillar,c_pillar,b_pillar,point_plate);
int move_num = a_pillar.pop();
if(move_num == point_plate){
counting++;
}
c_pillar.push(move_num);
move(all_plate-1,b_pillar,a_pillar,c_pillar,point_plate);
}
}
1996题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
int line_num=sc_01.nextInt();
for(int i = 0;i< line_num;i++){
int test_num = sc_01.nextInt();
double result = Math.pow(3,test_num);
System.out.println((long) result);
}
}
}
1108题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
while (sc_01.hasNext()) {
int num_01 = sc_01.nextInt();
int num_02 = sc_01.nextInt();
int tmp = 0;
if (num_01 < num_02) {
tmp = num_01;
num_01 = num_02;
num_02 = tmp;
}
int Gre_Div = greatest_divisor(num_01, num_02);
int lea_mul = num_01 /Gre_Div*num_02/Gre_Div * Gre_Div;
System.out.println(lea_mul);
}
}
//利用辗转相除法。
private static int greatest_divisor(int num_01, int num_02) {
int tmp = 0;
while (num_01 % num_02 != 0) {
tmp = num_02;
num_02 = num_01 % num_02;
num_01 = tmp;
}
return num_02;
}
}
2138题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
//有了惯性思维,以为不用判断hasNext,一切皆有可能。
while (sc_01.hasNext()) {
long num_mon = sc_01.nextLong();
ArrayList<Integer> arrayList_01 = new ArrayList<Integer>();
for (long i = 0; i < num_mon; i++) {
int tmp = sc_01.nextInt();
arrayList_01.add(tmp);
}
boolean result = false;
long counting = 0;
for (long i = 0; i < num_mon; i++) {
result = check_Prime_number(arrayList_01.get((int) i));
if (result) counting++;
}
System.out.println(counting);
}
}
//存在时间复杂度过高的问题。三中优化方法:(1)num/2+1;(2)sqrt(num)+1;(3)去掉整数;(4)艾拉拖死筛选法
private static boolean check_Prime_number(int num) {
for (long i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) return false;
}
return true;
}
}
1722题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
while (sc_01.hasNext()){
int num_01 = sc_01.nextInt();
int num_02 = sc_01.nextInt();
int tmp = 0;
//将较小的数放在第一个。
if(num_01 > num_02){
tmp = num_01;
num_01 = num_02;
num_02 = tmp;
}
if(num_01 != num_02){
//若是不相等
//注意一定是首尾相连的形状情况,因为有两刀是重合的,以题目4,6为例,所以按照图中的标记全部切割是4+6-2,
// 2是重合的切割标记数量,数学意义上是4,6的最大公约数,这样如果4人,则1+8 2+3 4+5 6+7,如果6人,
// 则1+2 3+4 5+6.......(可以以圆心角的度数来理解)
int Gre_Div = greatest_divisor(num_01, num_02);
System.out.println((num_02 + num_01)-Gre_Div);
}else{
//如果两个数相等,就不用进行判断了。
System.out.println(num_01);
}
}
}
//利用辗转相除法。
private static int greatest_divisor(int num_01, int num_02) {
int tmp = 0;
while (num_01 % num_02 != 0) {
tmp = num_02;
num_02 = num_01 % num_02;
num_01 = tmp;
}
return num_02;
}
}
2504题:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc_01 = new Scanner(System.in);
int line_num = sc_01.nextInt();
for (int i = 0; i < line_num; i++) {
int num_01 = sc_01.nextInt();
int GCD_01 = sc_01.nextInt();
int num_02 = 0;
if(num_01 / GCD_01 == 1){
num_02 = GCD_01 * 2;
System.out.println(num_02);
}else{
int division_01 = num_01 / GCD_01;
int division_02 =2;
//对其进行判断。若是两个数除1以外的公约数,则return false,否则return true;
while (!checkGCD(division_01,division_02)){
division_02++;
}
System.out.println(division_02 *GCD_01);
}
}
}
private static boolean checkGCD(int division_01, int division_02) {
int tmp = 0;
//调换次序。大数放在前面.
if(division_01 < division_02){
tmp = division_01;
division_01 = division_02;
division_02 = tmp;
}
while (division_01 % division_02 != 0 ){
tmp = division_02;
division_02 = division_01 %division_02;
division_01 = tmp;
}
if(division_02 == 1){
return true;
}else{
return false;
}
}
}