文章

10

粉丝

102

获赞

20

访问

8.4k

头像
组队刷题 题解:为什么不对 我这个struct就多定义了一个 就只能ac20%
P1307
发布于2024年3月22日 13:49
阅读数 899

#include<bits/stdc++.h>
using namespace std;
struct bankuai{
	double a;
	double b;
	double c=b/a;
}aa[1005];
 
bool cmp(bankuai a1,bankuai a2){
	return a1.c<a2.c;
}
int main(){	
	int m,n;
	while(cin>>m>>n){
		if(n==-1&&m==-1) break;		
		for(int i=0;i<n;i++){
			cin>>aa[i].a>>aa[i].b;			
		}
		sort(aa,aa+n,cmp);		
		double sum=0;
		for(int i=0;i<n;i++){
			if(m>=aa[i].b){
				sum+=aa[i].a;
				m-=aa[i].b;
			}
			else{
				sum+=(m/aa[i].c);
				break;
			}
		}		
		cout<<fixed<<setprecision(3)<<sum<<endl;
	}
}

 

登录查看完整内容


登录后发布评论

4 条评论
s0woy
2025年6月26日 15:04

double c=b/a;这种写法是有问题的,如果想在初始化结构体的时候就记录c的值,就需要写一个构造函数,而不是在声明阶段直接写(因为这个时候a和b都还未初始化)

下面是正确的写法,使用构造函数

struct node {

    float a, b;

    float c;

    node(float a, float b) {

        this->a = a;

        this->b = b;

        this->c = a / b;

    }

};

这样当初始化node(1,2)才会有node.c = 0.5

赞(0)
snake
2024年3月29日 16:34

可以在输入之后把c的值打印出来看一下,应该是不支持这种写法的

赞(1)
zhaoxiaobao
2024年3月28日 15:16

解决了吗

赞(0)

snake : 回复 zhaoxiaobao: 可以在输入之后把c的值打印出来看一下,应该是不支持这种写法的

2024年3月29日 16:34