gift1-section1.1

来源:互联网 发布:dede淘宝客api采集 编辑:程序博客网 时间:2024/06/08 18:32

题目大意

    有一群人相互送礼物,每个人都会准备一些钱买礼物送给一些朋友(朋友的个数,钱的金额可能想等也可能不相等,也可能为0),某个人送给他的朋友的礼物价值是相同的,如:一个人准备了60元买礼物送给朋友,则每个朋友收到的礼物价值是20元。现给出每个人的名字,并给出每个人准备的钱与要赠送的朋友。求出每个人收到的礼物的价值之和减去用掉的钱的值。

输入格式

line 1:N(人数)line 2-N+1:每行一个字符串,表示人的名字line N+2-最后:这部分数据分成N份,每份由3小段组成。    每份的第一段:一个字符串,表示送出礼物的人的名字    每份的第二段:两个数字,第一个数字表示送出礼物的人准备的钱,第二个数字表示送给几个朋友礼物    每份第三段:如果第二段第二个数字不为零,则这一段的每一行都是一个字符串,表示送给礼物的人的名字;如果第二段第二个数字为零,则这一段为空

输出格式

    N行,每行是一个的名字加上空格再加上收到的比送出的钱多的数目。

样例输入

5davelauraowenvickamrdave200 3lauraowenvickowen500 1daveamr150 2vickowenlaura0 2amrvickvick0 0

样例输出

dave 302laura 66owen -359vick 141amr -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;}