红包的收益(人人网2017春招真题)

来源:互联网 发布:mysql todays 编辑:程序博客网 时间:2024/05/01 00:58

如你所知,中国素来有发红包的习俗。
新年要到了,小明想要知道朋友圈里每个人的收益。
每个人有mi数量的钱用来发红包,并且这笔钱会平均地发给ki个人(收益得到的钱不再发红包)。
而且发给每个人的钱都是整数。如果不能整除,发红包的人保留mi mod ki的钱。

输入
第1行,一个整数n,2<=n<=10,小明的n个朋友。
第 2到n+1行每行一个字符串,第i+1行表示第i个人的名字。
接下来n段:
每段第一行是一个字符串,表示发红包的人的名字。
第二行为两个数mi,ki。含义如上。
接下来ki行,每行一个字符串表示被发红包的人的名字。

样例输入
5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0

输出
n行,每行一个字符串和一个整数,分别表示第i个人的名字和收益。

样例输出
dave 302
laura 66
owen -359
vick 141
amr -150

时间限制
C/C++语言:1000MS
其他语言:3000MS
内存限制
C/C++语言:65536KB
其他语言:589824KB


代码如下:

import java.util.ArrayList;import java.util.HashMap;import java.util.Scanner;class Friend{    private String name;    private int sum;    private int receive;    private int cnt;    public void Set(int sum, int cnt) {        this.sum = sum;        this.cnt = cnt;    }    public Friend(String name){        this.name = name;        this.sum = 0;        this.receive = 0;    }    public void Receive(int num){        this.receive += num;    }    public void Print(){        System.out.println(this.name+" "+this.receive);    }    public String getName() {        return name;    }    public int getSum() {        return sum;    }    public int getReceive() {        return receive;    }    public void setReceive(int receive) {        this.receive = receive;    }    public void Send(Friend friend){        friend.Receive(this.sum/this.cnt);    }}public class Main {    static int N;    static ArrayList<Friend> friends_set = new ArrayList<>();    static HashMap<String,Friend> friends_map= new HashMap<>();    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner in = new Scanner(System.in);        N = in.nextInt();        for ( int i = 0 ; i < N ; i++){            String name = in.next();            Friend tmp = new Friend(name);            friends_set.add(tmp);            friends_map.put(name, tmp);        }        for ( int i = 0 ; i < N ; i++){            String name = in.next();            int sum = in.nextInt();            int cnt = in.nextInt();            Friend sender = friends_map.get(name);            sender.Set(sum,cnt);            if ( cnt == 0 && sum == 0){                continue;            }else{                for ( int k = 0 ; k < cnt ; k++){                    String receiver_name = in.next();                    Friend receiver = friends_map.get(receiver_name);                    sender.Send(receiver);                }                int send_receive = sender.getReceive();                sender.setReceive(send_receive-sum+sum%cnt);            }        }        for ( int i = 0 ; i < friends_set.size() ; i++){            friends_set.get(i).Print();        }        in.close();    }}
0 0