问题标题: 酷町堂:2556 发红包

0
0
已解决
高梓荣
高梓荣
新手天翼
新手天翼

题目描述 Description

过年了,亲戚之间在拜年的时候会顺便发个红包表达对对方的祝福。现在在一个家族里,有的亲戚之间比较熟络,会发红包问候。现在每个亲戚都列出了一份自己要去发红包的亲戚的名单,并且准备了一笔用于发红包的钱平均发给名单上的亲戚,每一家都会得到金额为整数的红包,不够分的金额就不发出去。在给出每一家亲戚的名字以及他要发红包的名单上亲戚的名字的情况下,计算最终每家最终净赚的钱。

输入描述 Input Description

第一行,一个整数n,表示亲戚的人数(2≤n≤10)
接下来n行,每行一个字符串,表示一个亲戚的名字
接下来n段,每段若干行,组织方式如下:
第一行是一个字符串,表示一个亲戚的名字
第二行是他准备用来发红包的钱数s(0≤s≤2000),以及被他发红包的亲戚总数m,以一个空格隔开
接下来m行,每行一个字符串,表示被他发红包的亲戚的名字

输出描述 Output Description

n行,每行有一个亲戚的名字和他净赚的钱
按照输入中第2到n+1行中亲戚的名字的顺序输出

样例输入 Sample Input

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

样例输出 Sample Output

dave 302 laura 66 owen -359 vick 141 amr -150

数据范围及提示 Data Size & Hint

每个亲戚发出的每个红包的钱均为整数,并且每个红包里的钱塞得尽可能多

 

(用模拟来做)


0
已采纳
刘乐宸
刘乐宸
新手天翼
新手天翼

你一定还没有忘记我,函数奉上

int n;
struct HB{
    string name;
    int in_money,out_money;
    int jin(){
        return in_money-out_money;
    }
}h[15]; 
int f(string s){
    for(int i=1;i<=n;i++){
        if(s==h[i].name)
            return i;
    }
}

部分主代码

   for(int i=1;i<=n;i++){
        cin>>s1;
        index1=f(s1); 
        cin>>money>>num;
        if(num==0) h[index1].out_money=0;
        else h[index1].out_money=money/num*num;
        for(int j=1;j<=num;j++){
            cin>>s2;
            index2=f(s2);
            h[index2].in_money+=money/num;//这个人会收到多家的钱。 
        }
    }

 

0
李瑞曦
李瑞曦
高级天翼
高级天翼

有微课啊:

李瑞曦在2020-07-15 19:21:35追加了内容

还不需要酷町币:

 

0
0
0
徐子玄
徐子玄
初级光能
初级光能

结构体+自定义函数(非cmp!)

struct P {
    string name;
    int in,out;
}a[15];
int f(string s) {
    for(int i=1;i<=n;i++)
        if(a[i].name==s)
            return i;
}

核心(主函数内) 

while(t--) {
        string s1;
        int s,m;
        cin>>s1>>s>>m;
        int p1=f(s1);
        if(m==0)
            a[p1].out=0;
        else a[p1].out=s/m*m;
        for(int i=1;i<=m;i++) {
            string s2;
            cin>>s2;
            int p2=f(s2);
            a[p2].in+=s/m;
        }
    }

望采纳

我要回答