问题标题: 酷町堂:2731

0
0
已解决
被禁言 何冯成
何冯成
中级光能
中级光能
2731   国王游戏

题目描述 Description
正逢某国的国庆,该国国王邀请若干位大臣来一起聚会,他们做了一个小游戏,大厅中间放了两个大的纸盒子,纸盒子中分别放了很多的数字,数字可能有重复的,现在包括国王在内的所有人都分别来两个纸盒子中抽取数字,从a盒子中抽取到的数字放在左手中,从b盒子中抽取到的数字放在右手中,现在每个人都将自己左手上的数字除以右手上的数字得到那个人本轮游戏的游戏值,游戏值为小数,国王想给每位大臣奖励金币,规则如下:获得的游戏值比国王大的大臣获得的金币为该大臣的游戏值和国王的游戏值的差值的两倍,获得的游戏值比国王小的大臣获得的金币为该大臣的游戏值和国王的游戏值的差值的一半,,获得的游戏值和国王相等的大臣获得的金币为0,请你按照获得金币从大到小的顺序输出大臣的金币的数量、游戏值的大小和当时左右手分别抽到的数字的大小,如果金币值相等则按照左手抽到的数字从大到小排序。

输入描述 Input Description
第一行:正整数n(n<100),表示大臣的数量
第二行:两个整数,分别表示国王的左手和右手的数字
接下来n行:两个整数,分别表示每位大臣的左手和右手的数字

输出描述 Output Description
输出n行,每行四个数字,用一个空格间隔,按照获得金币从大到小的顺序输出大臣的金币的数量、游戏值的大小和当时左右手分别抽到的数字的大小

样例输入 Sample Input
2
12 3
12 5
10 8

样例输出 Sample Output
1.375 1.25 10 8
0.8 2.4 12 5

 

本人样例都没过的代码:

#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct dc{
    int a,b;
}d[110];
bool cmp(int x,int y){
    return x>y;
}
double z[110],q[110];
int main(){
cin>>n;
int g,w;
cin>>g>>w;
double gw=g/w;
for(int i=1;i<=n;i++){
    cin>>d[i].a>>d[i].b;
    z[i]=d[i].a*1.0/d[i].b;
}
for(int i=1;i<=n;i++){
    if(z[i]>gw) z[i]=(z[i]-gw)*2;
    else if(z[i]<gw) z[i]=(gw-z[i])/2;
    else z[i]=0;
}
sort(z+1,z+n+1,cmp);
for(int i=1;i<=n;i++){
    cout<<z[i]<<" "<<d[i].a*1.0/d[i].b<<" "<<d[i].a<<" "<<d[i].b<<endl;
}
return 0;
}

@董宇昊

何冯成在2020-05-29 17:57:23追加了内容
#include<iostream>
#include<algorithm>
using namespace std;
struct stu{
int zuo,you;
double game(){
return (double)zuo/you;
}
double gold;
}a[10010];
bool cmp(stu x,stu y){
	if(x.gold!=y.gold) return x.gold>y.gold;
	return x.zuo>y.zuo; 
}
int main(){
	int n;
	cin>>n;
	double gw;
	int z,y; 
	cin>>z>>y;
	gw=z/y;
for(int i=1;i<=n;i++){
cin>>a[i].zuo>>a[i].you;
if(a[i].game()>gw) a[i].gold=2*(a[i]. game()-gw);
else if(a[i].game()<gw) a[i]. gold=0.5*(gw-a[i]. game());
else a[i]. gold=0;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
	cout<<a[i].gold*1.0<<" "<<a[i].zuo*1.0/a[i].you<<" "<<a[i].zuo<<" "<<a[i].you<<endl; 
}
return 0;
}

@董宇昊


0
已采纳
刘廷钰
刘廷钰
初级守护
初级守护

结构体以及函数部分:

struct stu{
    int left,right;
    double game(){
    return (double)left/right;
    }double gold;
}国王,a数组
比较函数(自己写)

计算金币:

 if(a[i]. game()>gw.game()){
            a[i].gold=2*(a[i]. game()-gw.game());   
        }
        else if(a[i].game()<gw.game()){
            a[i]. gold=0.5*(gw.game()-a[i]. game());    
        }
        else{
            a[i]. gold=0;
        }

大佬你在我们班是数一数二的高手,其他的自己思考哈

刘廷钰在2020-06-01 12:37:51追加了内容

谢谢大佬,你AC了吗?如果还有问题请在QQ私我

0
沈峻宇
沈峻宇
资深天翼
资深天翼

可能需要运用到枚举算法!

沈峻宇在2020-05-29 18:11:12追加了内容

一个一个试

0
何羽桐
何羽桐
修练者
修练者

111111111111111111111111111111111111111111111111111

0
我要回答