求助站外题
  • 板块学术版
  • 楼主_QrSn_
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/9/21 13:16
  • 上次更新2023/10/27 10:27:26
查看原帖
求助站外题
511253
_QrSn_楼主2022/9/21 13:16

代码:

#include<bits/stdc++.h>
using namespace std;
struct student
{
	string name;
	int money;
}a[101];
bool cmp(student x,student y)
{
	return x.money>y.money;
}
int n;
int find(string name3)
{
	string name4;
	for(int i=0;i<n;i++)
	{
	    name4=a[i].name;
		if((string)name4==(string)name3) return i;
	}
}//找人的函数 
int main(){
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].name;
	}
	for(int i=0;i<n;i++)
	{
		int sum;cin>>sum;//买礼物的钱 
		int x;cin>>x;//送出去的人数 
		if(sum==0){cout<<"continue"<<endl;continue;}
		int sum2=sum/x;//每个人得到的钱
		a[i].money=sum-sum2*x;
		cout<<sum<<" "<<x<<" "<<sum2<<" "<<a[i].money<<endl;
		for(int j=0;j<x;j++)
		{
			string name2;cin>>name2;
			int ans=find(name2);//寻找名字为这个的人 
		    a[ans].money+=sum2;//给他打钱
			cout<<name2<<" "<<ans<<" "<<a[ans].money<<endl; 
		}
	}
	sort(a,a+n,cmp);
	for(int i=0;i<n;i++)
	{
		cout<<a[i].name<<" "<<a[i].money<<endl;
	} 
	return 0;
}

题目:

题目描述
    圣诞节到了,乐乐所在的班准备搞一个圣诞晚会,晚会的其中一个环节是全班同学互送礼物。已知每个同学都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。有些人准备了较多的钱,有些人准备了较少的钱。现在乐乐想知道晚会结束后哪些同学收到的礼物的总价值最大(包含无法送出的钱)。
输入
第1行一个整数n,表示乐乐所在的班的人数(2<=n<=100);
第2..n+1行(n行),按班里的学号顺序给出每个同学的姓名。(姓名只包含大写或小写字母,姓名的长度不超过10个字母);
第n+2..2*n+2行(n行),按学号顺序给出每个同学送礼物的信息:第一个是整数m(0<=m<=5000),表示该同学准备用来送礼的钱;第二个是整数k(0<=k<=20),表示该同学准备把钱平均分给k个好朋友(给每个朋友的钱都是整数,并尽量全部用完,剩下无办法再分的钱自己保留);接着是k个姓名,每个姓名之间用一个空格分开,表示要分给哪k个朋友。
输出
    输出文件有n行,按最后的钱数从大到小的顺序输出每个同学的姓名和钱数。如果钱数相同的按学号顺序从小到大输出。

样例输入 Copy
5
Dave
laura
owen
vick
amr
200 3 laura owen vick
500 1 Dave
150 2 vick laura
600 1 amr
0 0
样例输出 Copy
amr 600
Dave 502
laura 141
vick 141
owen 66
提示
Dave的200元分给了3人,每人66元,剩下2元,还收到了2号给他的500元,因此他最后有502元。
laura的500元给了同学,收到1号给他的66元和3号给他的75元,他最后有141元。
owen的150元给了2人,每人75元,收到1号给他的66元,他最后有66元。
vick的600元给了同学,收到1号给他的66元和3号给他的75元,他最后有141元。
amr没钱给人,收到5号给他的600元,他最后有600元。

我的输出:

200 3 66 2
laura 1 66
owen 2 66
vick 3 66
500 1 500 0
Dave 0 502
150 2 75 0
vick 3 141
laura 1 75
600 1 600 0
amr 4 600
continue
amr 600
Dave 502
laura 75
owen 0
vick 0

奇怪的是,我的代码很明显最后有vick 3 141,证明vick是有141块钱的,但是输出的时候就莫名变成0了?而且Laura每次加的钱都是对的,就在最后变成最后一次的钱数,其他的有没有问题?

2022/9/21 13:16
加载中...