題目鏈接
題意就是給定人員,每次從其中一個人拿出一定數值,平分給特定的幾個人(無法整數平分的剩餘部分則保留),經過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();
}
}