5個編程題目
題目1:刪除最少數使得差值小於sub
示例:
輸入:
5 2
2 1 3 2 5
輸出:
1
代碼:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n,sub;
while(scanner.hasNext()) {
n = scanner.nextInt();
sub = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < nums.length; i++) {
nums[i] = scanner.nextInt();
}
Arrays.sort(nums);
System.out.println(getMin(nums, sub));
}
}
//01
public static int getMin(int[] nums,int sub) {
int ans = 0;
int n=nums.length;
if(n == 1) return 0;
int res = nums[n-1] - nums[0];
if(res >sub) {
int[] nums1 = Arrays.copyOfRange(nums, 0, n-2);
int[] nums2 = Arrays.copyOfRange(nums, 1, n-1);
ans = 1+Math.min(getMin(nums1, sub), getMin(nums2, sub));
}
return ans;
}
}
通過18%
題目2:房間遊戲,有n個房間,m點法力值,依次循環經過這n個房間,在每個房間留下足跡,需要消耗一定得法力值,請求出最多能在幾個房間留下法力值(可循環重複在房間留下足跡)。
示例:
輸入:
4 10
1 3 5 2
輸出:
4
代碼:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n,m;
n = scanner.nextInt();
m = scanner.nextInt();
int[] fangjian = new int[n];
int count = 0;
int min = Integer.MAX_VALUE;
int sum = 0;
for(int i =0;i<n;i++) {
fangjian[i] = scanner.nextInt();
if(fangjian[i]<min)min = fangjian[i];
sum +=fangjian[i];
m -=fangjian[i];
if(m>=0) {
count++;
}
else {
m +=fangjian[i];
}
}
if(m == min)count++;
if(m>min&&m<=sum) {
for(int i =0;i<n;i++) {
m -=fangjian[i];
if(m>=0) {
count++;
}
else {
m +=fangjian[i];
}
}
}
if(m>sum) {
count += (m/sum)*n;
if(m%sum == min)count++;
if(m%sum>min) {
for(int i =0;i<n;i++) {
m -=fangjian[i];
if(m>=0) {
count++;
}
else {
m +=fangjian[i];
}
}
}
}
System.out.println(count);
}
}
AC通過
還有一個位運算得題目,具體想不起來了。
其他題目沒時間做,也就更沒印象了,歡迎大佬補充,以及留下自己的代碼。