java通关整理汇总-Java基础、计算机网络、数据库、设计模式、框架、算法模板、笔试
1.丑数
public class main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(find(n));
}
private static int find(int n){
if(n == 0) {
return 0;
}
int i2 = 0,i3 = 0,i5 = 0;
int[] arr = new int[n];
arr[0] = 1;
for(int i = 1;i<n;i++){
arr[i] = Math.min(arr[i2]*2, Math.min(arr[i3]*3,arr[i5]*5));
if(arr[i] == arr[i2]*2){
i2++;
}
if(arr[i] == arr[i3]*3){
i3++;
}
if(arr[i] == arr[i5]*5){
i5++;
}
}
return arr[n-1];
}
}
2.求abcd+dcba=8888
public class main2 {
public static void main(String[] args) {
int i;
int a,b,c,d;
for(i = 0;i<10000;i++){
a = i/1000;
b = (i - a*1000)/100;
c = (i - a*1000 - b * 100)/10;
d = i - a*1000 - b * 100 - c*10;
if((i + b * 1000 +c*100 +d*10 + a) == 8888 && d>=0){
System.out.println(a + " " + b + " " + c + " " + d);
}
}
}
}
3.打家劫舍
这题描述是在数组中选取任意不相邻的数,使得和最大。
和打家劫舍的题目一样
public class main3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String[] ss = s.split(",");
int[] num = new int[ss.length];
for (int i = 0;i<ss.length;i = i+1){
num[i] = Integer.valueOf(ss[i]);
}
System.out.println(sum(num));
}
private static int sum(int[] nums){
if(nums == null||nums.length<=0){
return 0;
}
if(nums.length == 1) return nums[0];
else if(nums.length == 2) return Math.max(nums[0],nums[1]);
else {
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(dp[0],nums[1]);
for(int i = 2;i<nums.length;i++){
dp[i] = Math.max(dp[i-1],dp[i-2] + nums[i]);
}
return dp[nums.length-1];
}
}
}