下面是模拟代码
import java.util.ArrayList
public class Test {
//攻击卡数组
private int [] a = {1,1,3,4}
//匹配结果
private ArrayList<int []>result = new ArrayList<int []>()
//防御卡数组
private D [] d = {new D(1,5),new D(2,2),new D(2,8),new D(3,4)}
//最大防御卡价值初始化为0
private int value = 0
public static void main(String []args){
int [] input = {1,2,3,4}
Test t = new Test()
t.process(input, input.length, 0)
ArrayList<int []>r = t.getResult()
int size = r.size()
System.out.println("可能的组合有"+size+"种 ")
for(int i=0i<sizei++){
int resultSize = r.get(i).length
System.out.print("第"+(i+1)+"种 为:")
for(int j=0j<resultSizej++){
System.out.print(r.get(i)[j])
}
}
System.out.println()
System.out.println("Value = "+t.getValue())
System.out.println("结束")
}
public void process(int[] input, int n, int k) {
if (n == k) {
int count = 0
int size = input.length
int [] out = new int [size]
for (int i = 0i <sizei++) {
if(d[input[i]-1].getX()>a[i]){
count += d[input[i]-1].getY()
}
out [i] = input[i]
}
//如果排列价值和大于之前的最大防御价值改变最优匹配
if(count >value){
if(result.size() != 0){
result.clear()
}
result.add(out)
value = count
for(int in:out){
System.out.print(in)
}
System.out.println()
}
//如果价值和一样并且没有这个组合增加到结果list
if(count == value &&!this.inTheResult(input)){
result.add(out)
for(int in:out){
System.out.print(in)
}
System.out.println()
}
} else {
for (int i = ki <ni++) {
swap(input, k, i)
process(input, n, k + 1)
swap(input, i, k)
}
}
}
public boolean inTheResult(int[]a){
int size = this.result.size()
for(int i=0i<sizei++){
int s = this.result.get(i).length
for(int j=0j<sj++){
if(a[j] != this.result.get(i)[j]){
return false
}
}
}
return true
}
public ArrayList<int[]>getResult(){
return this.result
}
public int getValue(){
return this.value
}
public void swap(int[] a, int x, int y) {
int temp = a[x]
a[x] = a[y]
a[y] = temp
}
//防御卡的类 x是di y是wi
public class D{
// x = di y = wi
private int x,y
D (int x,int y){
this.x = x
this.y = y
}
public int getX(){
return x
}
public int getY(){
return y
}
}
}
运行结果
1234
1243
1324
1342
2314
2341
3214
3241
3412
3421
4321
4312
可能的组合有4种
第1种 为:3412第2种 为:3421第3种 为:4321第4种 为:4312
Value = 12
结束
貌似测试了下应该是正确的
其实这个问题挺有意思的建议你不要看我的代码根据我的提示自己做次
import java.util.Randompublic class Game {
public static void main(String[] args) {
System.out.println("比赛开始")
Person p1 = new Person("刘邦", 100, 10)
Person p2 = new Person("项羽", 100, 10)
while (p1.getBlood() >0 &&p2.getBlood() >0) {
Random random = new Random()
if (random.nextInt(100) >50) {
p1.beat(p2)
p2.beat(p1)
} else {
p2.beat(p1)
p1.beat(p2)
}
}
p1.printState()
p2.printState()
System.out.println("game over!")
}
}
class Person {
private int blood// 初始血量
private int range// 掉血范围
private String name// 姓名
public String getName() {
return name
}
public void setName(String name) {
this.name = name
}
public int getRange() {
return range
}
public void setRange(int range) {
this.range = range
}
public int getBlood() {
return blood
}
public void setBlood(int blood) {
this.blood = blood
}
// 构造函数
public Person(String name, int blood, int range) {
this.name = name
this.blood = blood
this.range = range
}
// 击打
public void beat(Person person) {
int bleeding = person.hurt()
System.out
.println(String.format("%s打了%s一耳光,%s流了%s滴血。", this.name, person.getName(), person.getName(), bleeding))
}
// 被打,受伤
public int hurt() {
Random random = new Random()
int bleeding = random.nextInt(this.range) + 1
if (bleeding >this.blood) {
bleeding = this.blood
}
this.blood -= bleeding
return bleeding
}
// 输出状态
public void printState() {
if (this.blood == 0) {
System.out.println(String.format("%s被打死了", this.name))
} else {
System.out.println(String.format("%s还剩%s滴血", this.name, this.blood))
}
}
}
结果(随机):
比赛开始
刘邦打了项羽一耳光,项羽流了6滴血。
项羽打了刘邦一耳光,刘邦流了4滴血。
刘邦打了项羽一耳光,项羽流了8滴血。
项羽打了刘邦一耳光,刘邦流了2滴血。
刘邦打了项羽一耳光,项羽流了9滴血。
项羽打了刘邦一耳光,刘邦流了7滴血。
项羽打了刘邦一耳光,刘邦流了8滴血。
刘邦打了项羽一耳光,项羽流了9滴血。
刘邦打了项羽一耳光,项羽流了1滴血。
项羽打了刘邦一耳光,刘邦流了10滴血。
刘邦打了项羽一耳光,项羽流了2滴血。
项羽打了刘邦一耳光,刘邦流了7滴血。
项羽打了刘邦一耳光,刘邦流了7滴血。
刘邦打了项羽一耳光,项羽流了2滴血。
刘邦打了项羽一耳光,项羽流了1滴血。
项羽打了刘邦一耳光,刘邦流了7滴血。
刘邦打了项羽一耳光,项羽流了10滴血。
项羽打了刘邦一耳光,刘邦流了9滴血。
项羽打了刘邦一耳光,刘邦流了5滴血。
刘邦打了项羽一耳光,项羽流了1滴血。
刘邦打了项羽一耳光,项羽流了5滴血。
项羽打了刘邦一耳光,刘邦流了8滴血。
刘邦打了项羽一耳光,项羽流了9滴血。
项羽打了刘邦一耳光,刘邦流了6滴血。
项羽打了刘邦一耳光,刘邦流了5滴血。
刘邦打了项羽一耳光,项羽流了6滴血。
项羽打了刘邦一耳光,刘邦流了5滴血。
刘邦打了项羽一耳光,项羽流了6滴血。
项羽打了刘邦一耳光,刘邦流了4滴血。
刘邦打了项羽一耳光,项羽流了7滴血。
刘邦打了项羽一耳光,项羽流了4滴血。
项羽打了刘邦一耳光,刘邦流了6滴血。
刘邦被打死了
项羽还剩14滴血
game over!
全手写,望采纳,谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)