2556 发红包

胖哒叔叔又回来啦!你们想我了吗?今天给大家带来一道题目《发红包

题目描述 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

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

#include<bits/stdc++.h>//偷懒的万能头
using namespace std;
int n,s,m,k,t;
struct Redbag{//结构体定义(姓名、收入和支出) 
    string name;
    int in,out;
}a[88];
int Find(string b)//每次输入之后先找到对应的人,再进行运算 
{
    for(int i=1;i<=n;i++)
        if(a[i].name==b)
            return i;
}
int main()
{
    string b;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i].name;
    for(int i=1;i<=n;i++)
    {
        cin>>b;
        k=Find(b);//找人
        cin>>a[k].out>>m;
        for(int j=1;j<=m;j++)
        {
            cin>>b;
            t=Find(b);//找人
            a[t].in+=a[k].out/m; 
        }
        if(m!=0)a[k].out=a[k].out-a[k].out%m;//进行计算
        else a[k].out=0;
    }
    for(int i=1;i<=n;i++)
        cout<<a[i].name<<" "<<a[i].in-a[i].out<<endl;//输出结果
    return 0;//完美的收尾! 
}

 

转载于:https://my.oschina.net/u/4201138/blog/3100272

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值