gift1-section1.1

题目大意

    有一群人相互送礼物,每个人都会准备一些钱买礼物送给一些朋友(朋友的个数,钱的金额可能想等也可能不相等,也可能为0),某个人送给他的朋友的礼物价值是相同的,如:一个人准备了60元买礼物送给朋友,则每个朋友收到的礼物价值是20元。现给出每个人的名字,并给出每个人准备的钱与要赠送的朋友。求出每个人收到的礼物的价值之和减去用掉的钱的值。
输入格式
line 1:N(人数)
line 2-N+1:每行一个字符串,表示人的名字
line N+2-最后:这部分数据分成N份,每份由3小段组成。
    每份的第一段:一个字符串,表示送出礼物的人的名字
    每份的第二段:两个数字,第一个数字表示送出礼物的人准备的钱,第二个数字表示送给几个朋友礼物
    每份第三段:如果第二段第二个数字不为零,则这一段的每一行都是一个字符串,表示送给礼物的人的名字;如果第二段第二个数字为零,则这一段为空
输出格式
    N行,每行是一个的名字加上空格再加上收到的比送出的钱多的数目。
样例输入
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
样例输出
dave 302
laura 66
owen -359
vick 141
amr -150

题解

一个人受到的礼物价值,在于送他礼物的人付出的钱,所以,以某人A为例,依次读取数据,若A作为送礼人,则A收获的价值减去他准备用来送礼的金额,若A作为收礼人,则A的收获价值加上送她礼物的人准备的钱除以送的人数。
另外需要注意,此题中,如果某个人准备的钱不能被准备送给礼物的人数整除,则这个人还会剩下一部分钱在身边。

代码

#include<stdio.h>
#include<string.h>
int main()
{

char Np[11][15],Nplone[15];
int Npnet[11]={0},num,i,rank,j,k,a,b;
scanf("%d",&num);
for(i=0;i<num;i++)
{
    scanf("%s",Np[i]);
}
for(i=0;i<num;i++)
{   rank=0;
    scanf("%s",Nplone);
    for(j=0;j<num;j++)
    {
        if(strcmp(Nplone,Np[j])==0)
        {
            rank=j;
        }


    }
    scanf("%d %d",&a,&b);
    if(b)
    Npnet[rank]=Npnet[rank]-(a/b)*b;
    for(j=0;j<b;j++)
    {
        scanf("%s",Nplone);
        for(k=0;k<num;k++)
        {
            if(strcmp(Nplone,Np[k])==0)
            {
                Npnet[k]=Npnet[k]+a/b;
                break;
            }
        }
    }

}
for(i=0;i<num;i++)
{
    printf("%s %d\n",Np[i],Npnet[i]);
}
return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值