标签:10 红包 int 抢红包 PTA 输出 编号 scanf
没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。
输入格式:
输入第一行给出一个正整数N(≤10
4
),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下:
K N1 P1 ⋯ NK PK
其中K(0≤K≤20)是发出去的红包个数,Ni
是抢到红包的人的编号,Pi
(>0)是其抢到的红包金额(以分为单位)。注意:对于同一个人发出的红包,每人最多只能抢1次,不能重复抢。
输出格式:
按照收入金额从高到低的递减顺序输出每个人的编号和收入金额(以元为单位,输出小数点后2位)。每个人的信息占一行,两数字间有1个空格。如果收入金额有并列,则按抢到红包的个数递减输出;如果还有并列,则按个人编号递增输出。
输入样例:
10
3 2 22 10 58 8 125
5 1 345 3 211 5 233 7 13 8 101
1 7 8800
2 1 1000 2 1000
2 4 250 10 320
6 5 11 9 22 8 33 7 44 10 55 4 2
1 3 8800
2 1 23 2 123
1 8 250
4 2 121 4 516 7 112 9 10
输出样例:
1 11.63
2 3.63
8 3.63
3 2.11
7 1.69
6 -1.67
9 -2.18
10 -3.26
5 -3.26
4 -12.32
这题我一开始没定义结构体,想用多个并列的数组做,后来才明白这种题应该定义结构体来做,更加清晰明了。至于小数,我是在最后输出时运算的。
#include<stdio.h>
typedef struct peng
{
int q;//编号,因为最后要输出编号,方便冒泡排序用
int w;//红包个数
int e;//钱数
}Zhe;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
Zhe a[n];//初始化;
for(int i=0;i<n;i++)
{
a[i].q=i+1;
a[i].w=0;
a[i].e=0;
}
int k;
for(int i=0;i<n;i++)
{
scanf("%d",&k);
for(int j=0;j<k;j++)
{
int x;
int y;
scanf("%d",&x);
scanf("%d",&y);
a[i].e=a[i].e-y;
a[x-1].e=a[x-1].e+y;
a[x-1].w++;
}
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j].e<a[j+1].e)
{
int t;
t=a[j].e;
a[j].e=a[j+1].e;
a[j+1].e=t;
t=a[j].q;
a[j].q=a[j+1].q;
a[j+1].q=t;
t=a[j].w;
a[j].w=a[j+1].w;
a[j+1].w=t;
}
else if(a[j].e==a[j+1].e)
{
if(a[j].w<a[j+1].w)
{
int t;
t=a[j].e;
a[j].e=a[j+1].e;
a[j+1].e=t;
t=a[j].q;
a[j].q=a[j+1].q;
a[j+1].q=t;
t=a[j].w;
a[j].w=a[j+1].w;
a[j+1].w=t;
}
}
}
}
for(int i=0;i<n;i++)
{
printf("%d %.2f\n",a[i].q,(float)a[i].e/100);
}
}
return 0;
}
标签:10,红包,int,抢红包,PTA,输出,编号,scanf 来源: https://blog.csdn.net/weixin_51659963/article/details/112853652
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。