题目链接
题意就是给定人员,每次从其中一个人拿出一定数值,平分给特定的几个人(无法整数平分的剩余部分则保留),经过N次这样的步骤后输出各自最后拥有的数值大小。
下面是C++实现
/*
ID: imzheng1
PROG: gift1
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
typedef struct {
string name;
int value;
}Person;
Person members[10];
int np;
Person * findByName(string name) {
for (int i = 0; i < np; i++) {
if (name == members[i].name) {
return &members[i];
}
}
}
int main() {
ofstream fout("gift1.out");
ifstream fin("gift1.in");
fin >> np;
for (int i = 0; i < np; i++) {
fin >> members[i].name;
}
int ng, total;
string giverName;
for (int i = 0; i < np; i++) {
fin >> giverName >> total >> ng;
Person * giver = findByName(giverName);
if (ng != 0) {
int average = total / ng;
int remainder = total % ng;
(* giver).value = (* giver).value - total + remainder;
for (int i = 0; i < ng; i++) {
string receiverName;
fin >> receiverName;
Person * receiver = findByName(receiverName);
(* receiver).value += average;
}
}
}
for (int i = 0; i < np; i++) {
fout << members[i].name << " " << members[i].value << endl;
}
return 0;
}
下面是Java实现
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
/*
ID: imzheng1
LANG: JAVA
TASK: gift1
*/
public class gift1 {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("gift1.in"));
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter("gift1.out")));
int np = Integer.parseInt(reader.readLine());
List<String> members = new ArrayList<String>();
int[] value = new int[np];
for(int i = 0; i < np; i++) {
members.add(reader.readLine());
}
String giver = reader.readLine();
while(giver != null && !giver.trim().equals("")) {
String[] numbers = reader.readLine().split(" ");
int total = Integer.parseInt(numbers[0]);
int num = Integer.parseInt(numbers[1]);
if(num != 0) {
int average = total / num;
int remainder = total % num;
int giverIndex = members.indexOf(giver);
value[giverIndex] = value[giverIndex] - total + remainder;
for(int i = 0; i < num; i++) {
String reciever = reader.readLine();
int recieverIndex = members.indexOf(reciever);
value[recieverIndex] = value[recieverIndex] + average;
}
}
giver = reader.readLine();
}
for(int i = 0; i < np; i++) {
writer.println(members.get(i) + " " + value[i]);
}
writer.close();
reader.close();
}
}