概述
import java.util.Arrays;
/*
小美最近迷上一款游戏,在游戏中有n个怪物,每个怪物的血量各有不同。
和任何一个怪物作战时小美每个回合都会造成等同于自己攻击力的伤害。
把一个怪物的血量打到小于等于0后这个怪物的经验就会被小美吸收,使得小美的攻击力加1.
小美初始攻击力是1,小美可以任意决定攻击怪物的顺序,也可以在已经攻击一个怪物且并未击杀的情况下攻击另一个怪物。
求小美击杀所有怪物的最小回合数。
样例输入
5
1 2 3 4 5
样例输出
5
*/
class Main1{
int MinBattle(int Number,int[] nums) {
int start_attack = 1; //小美初始攻击力
int minbattle = 0; //战斗员回合
//对输入怪兽的血量进行排序,从小到大开始打。
QuickSort.Quick(nums,0,nums.length-1);
System.out.println("怪兽血量排序后:" + Arrays.toString(nums));
//遍历怪兽血量,
for(int i = 0; i <= nums.length-1; i++){
while(true){
if(nums[i] > 0){
nums[i] -= start_attack;
minbattle++;
}else{
start_attack++;
break;
}
}
}
return minbattle;
}
}
//快速排序算法
class QuickSort{
//交换data数组 i和j的位置
static void reverse(int[] data, int i, int j ){
int temp;
temp = data[j];
data[j] = data[i];
data[i] = temp;
}
//快速排序算法 data数组快速排序,start和end对应数组下标
static void Quick(int[] data, int start, int end ){
if(start < end){
int base = data[start]; //基准
int low = start; //遍历开始
int high = end; //遍历结束
while(true){
while(high > low && base <= data[high]){ //从右到左搜索比base小的数
high--;
}
while(high > low && base >= data[low]){ //从左到右搜索比base大的数
low++;
}
if(low < high){
reverse(data, low, high);
}else{
break;
}
}
reverse(data,start,low);
Quick(data,start,low-1); //递归调用
Quick(data,low+1,end);
}
}
}
public class Meituan_1 {
public static void main(String[] args){
// int[] arr = new int[]{3,7,1,5,9};
// System.out.println(Arrays.toString(arr));
// QuickSort.Quick(arr,0,arr.length-1);
// System.out.println(Arrays.toString(arr));
int[] arr1 = new int[]{3,7,1,5,9};
Main1 main1 = new Main1();
int a = main1.MinBattle(5,arr1);
System.out.println("最小战斗次数为:" + a);
}
}
最后
以上就是微笑白昼为你收集整理的【java】 笔试题2022的全部内容,希望文章能够帮你解决【java】 笔试题2022所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复