void w_snatch_weapon(csoldier *p, csoldier *q) { //bool flag = true; int t = 0, s = 0; while (q->weapon[t] == 0)++t; if (10 - p->weapen_amount <= q->weapon[t]) { p->weapon[t] += 10 - p->weapen_amount; s += 10 - p->weapen_amount; p->weapen_amount = 10; q->weapen_amount -= s; q->weapon[t] -= s; return; } else { p->weapon[t] += q->weapon[t]; s += q->weapon[t]; p->weapen_amount += q->weapon[t]; q->weapon[t] -= s; q->weapen_amount -= s; if (t == 2 && q->weapon[3] > 0) { t = 3; if (10 - p->weapen_amount <= q->weapon[t]) { p->weapon[t] += 10 - p->weapen_amount; s += 10 - p->weapen_amount; p->weapon[t] -= 10 - p->weapen_amount; p->weapen_amount -= 10 - p->weapen_amount; p->weapen_amount = 10; } else { p->weapon[t] += q->weapon[t]; s += q->weapon[t]; q->weapen_amount -= q->weapon[t]; p->weapen_amount += q->weapon[t]; q->weapon[t] = 0; } } cout << s << ' '; out_weapen(t); return; } }
时间: 2023-06-15 13:08:18 浏览: 46
这段代码实现了一个抢夺武器的函数,函数名为 w_snatch_weapon,参数是两个指向 csoldier 类型对象的指针 p 和 q。
函数中的主要逻辑是这样的:首先找到 q 手中第一个有武器的位置,然后判断 p 手中是否还有可用的武器位置。如果没有,直接返回。如果有,就把 q 手中的武器抢过来,分两种情况:
1.抢过来的武器数量等于 p 剩余可用武器数量。这种情况下,把 q 手中的对应武器数量减去抢过来的数量,并将所有抢过来的武器放到 p 手中。
2.抢过来的武器数量小于 p 剩余可用武器数量。这种情况下,把 q 手中的对应武器全部抢过来,并将 p 剩余的可用武器数量增加相应的数量。如果抢过来的武器是第三个位置上的武器,并且 q 手中还有第四个位置上的武器,则抢夺第四个位置上的武器,直到 p 手中没有可用武器位置或者 q 手中没有武器为止。
函数中的 out_weapen 函数不在这个代码块中,我无法确定它的实现。
相关问题
写一个抢红包程序
以下是一个简单的抢红包程序,使用 Python 语言编写:
```python
import random
def snatch_red_packet(total_amount, total_num):
# 参数:总金额、总人数
result = []
rest_amount = total_amount
rest_num = total_num
for i in range(total_num):
if rest_num == 1:
# 最后一个红包,全部领取
result.append(rest_amount)
else:
# 按照随机比例分配红包金额
amount = random.randint(1, int(rest_amount / rest_num * 2))
result.append(amount)
rest_amount -= amount
rest_num -= 1
return result
# 测试程序
print(snatch_red_packet(100, 5))
```
程序中的 `snatch_red_packet` 函数接受两个参数:总金额和总人数。它会返回一个列表,列表中的每个元素表示每个人领取到的红包金额。程序使用随机数生成一个比例来分配红包金额,保证每个人领取到的金额是随机的。
在某举重比赛中,每个选手的成绩包括抓举成绩和挺举成绩,最后相加得到总成绩。现在有一个文本文件score1.data记录了该比赛中多位选手的分项成绩,该文件内容如下: 姓名:张三,抓举成绩106kg,挺举189kg. 姓名:李四,抓举成绩108kg,挺举186kg. 姓名:王五,抓举成绩112kg,挺举190kg. 现在需要对该成绩进行处理,计算出选手的总成绩后拼接到字符串之后成为新的字符串,格式为: 姓名:张三,抓举成绩106kg,挺举189kg. 总成绩: 295kg 然后将所有信息并写入到目标文件result.data中。 请使用java编码实现该成绩统计系统。 第一步,使用给定的文件名常量创建BufferedReader对象,通过reader对象调用方法readLine读取每一行的内容,并存储到List集合中; 第二步,处理数据; 第三步,使用给定的目标文件名常量创建BufferedWriter对象,并将参数给定的List集合中的字符串依次写入到目标文件中。
以下是Java编码实现该成绩统计系统的代码:
```java
import java.io.*;
import java.util.*;
public class ScoreStatistics {
private static final String SOURCE_FILE = "score1.data"; // 原始文件名常量
private static final String TARGET_FILE = "result.data"; // 目标文件名常量
public static void main(String[] args) throws IOException {
List<String> scores = readScoresFromFile(); // 读取所有选手成绩信息到List集合中
List<String> result = processScores(scores); // 处理所有选手成绩信息,添加总成绩信息,存储到List集合中
writeResultToFile(result); // 将处理后的所有选手成绩信息写入目标文件中
}
// 读取所有选手成绩信息到List集合中
private static List<String> readScoresFromFile() throws IOException {
List<String> scores = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader(SOURCE_FILE));
String line;
while ((line = reader.readLine()) != null) {
scores.add(line);
}
reader.close();
return scores;
}
// 处理所有选手成绩信息,添加总成绩信息,存储到List集合中
private static List<String> processScores(List<String> scores) {
List<String> result = new ArrayList<>();
for (String score : scores) {
String[] fields = score.split(",");
String name = fields[0].substring(3);
int snatch = Integer.parseInt(fields[1].substring(5, fields[1].length() - 2));
int cleanJerk = Integer.parseInt(fields[2].substring(5, fields[2].length() - 3));
int total = snatch + cleanJerk;
String scoreWithTotal = String.format("%s. 总成绩: %dkg", score, total);
result.add(scoreWithTotal);
}
return result;
}
// 将处理后的所有选手成绩信息写入目标文件中
private static void writeResultToFile(List<String> result) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(TARGET_FILE));
for (String score : result) {
writer.write(score);
writer.newLine();
}
writer.close();
}
}
```
注意事项:
1. 该实现假设源文件中每行记录的顺序都是姓名、抓举成绩、挺举成绩,且格式都是固定的。
2. 该实现假设源文件中每行记录都是合法的,即没有缺少字段、字段格式错误等问题。
3. 该实现假设目标文件的文件名常量和源文件的文件名常量不会发生变化。如果需要允许用户在运行时指定文件名,则需要修改代码,添加相应的命令行参数解析逻辑。