CCF CSP 炉石传说 JAVA 201609-3 100分

博客详细讨论了如何使用JAVA解决CCF CSP中关于炉石传说的一道题目,重点在于角色信息的处理,通过创建角色类封装生命值和攻击力。同时,利用Link接口的add(index, element)方法巧妙地处理随从的出场位置,确保战场上的随从编号始终从1开始连续。输出时需注意顺序和间隔。" 119578515,11279593,PyQt5应用:设计模式与界面控制实践,"['后端开发', 'GUI框架', 'Python', '面试指南', 'Java']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这个题麻烦在角色的信息不好处理

想想其实也好处理,只需要封装一个角色类,将生命值和攻击力封装起来就好了

还有一点是随从进场位置,如果出现在左边要使右面所有随从position+1

其实也好处理,正好!用Link接口实现的有add(index,element)方法,数据在列表中的位置可以完美的表示不同随从的position

更完美的是:“任意时刻,战场上的随从总是从1开始连续编号。

简直是提醒你用这个方法。


最后注意输出顺序和间隔就好。


package csp2016_09_3;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Role{
	int life,power;
	Role(int life,int power){this.life = life;this.power=power;}
	Role(int life){this.life=life;}
}

public class Main{
	static List<Role> p[] = new ArrayList[2];
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.nextLine();
		for (int i = 0; i < p.length; i++) {
			p[i] = new ArrayList<Role>();
			p[i].add(new Role(30,0));
		}
		
		int player = 0;
		int pos=0,attack=0,health=0;
		int attacker=0,defender=0;
		
		while((n--)!=0){
			String action = sc.next();
			if(action.equals("summon")){
				pos = sc.nextInt();
				attack = sc.nextInt();
				health = sc.nextInt();
//				System.out.println(pos+" "+attack+" "+health);
				p[player].add(pos, new Role(health,attack));
			}else if(action.equals("attack")){
				attacker = sc.nextInt();
				defender = sc.nextInt();
				
//				System.out.println(player+" "+attacker+" "+defender);
//				
//				for (int i = 0; i < p.length; i++) {
//					for (int j = 0; j < p[i].size(); j++) {
//						int pp = p[i].get(j).power;
//						int hh = p[i].get(j).life;
//						System.out.print(pp+" "+hh+"||");
//					}
//					System.out.println("||");
//				}
//				System.out.println(p[player].get(attacker).life+" "+p[player].get(attacker).power);
//				System.out.println(p[1-player].get(defender).life+" "+p[1-player].get(defender).power);
				
				p[player].get(attacker).life -= p[1-player].get(defender).power; 
				p[1-player].get(defender).life -= p[player].get(attacker).power;
				
				if(p[player].get(attacker).life <= 0){
					p[player].remove(attacker);
				}
				if(defender!=0 && p[1-player].get(defender).life <= 0){
					p[1-player].remove(defender);
				}
				
			}else if(action.equals("end")){
				player = 1-player;
			}else{
				System.out.println("error");
			}
		}
		//1
		if(p[0].get(0).life <=0 ) System.out.println(-1);
		else if(p[1].get(0).life <=0) System.out.println(1);
		else System.out.println(0);
		//2
		System.out.println(p[0].get(0).life);
		//3
		System.out.print(p[0].size()-1+" ");
		for (int i = 1; i < p[0].size(); i++) {
			System.out.print(p[0].get(i).life+" ");
		}
		System.out.println();
		//4
		System.out.println(p[1].get(0).life);
		//5
		System.out.print(p[1].size()-1+" ");
		for (int i = 1; i < p[1].size(); i++) {
			System.out.print(p[1].get(i).life+" ");
		}
	}
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值