警示
查看原帖
警示
1161910
peng_fuxin楼主2024/5/25 15:25

这题我有很多细节没处理到位:

以下是我的AC代码:

#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
double num[101];
double num_1[101];
double num_2[101];
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>num[i];
        cin>>num_1[i];
        num_2[i]=num_1[i]/num[i];
    }
    for(int i=0;i<n-1;i++){
         for(int j=i+1;j<n;j++){
            if(num_2[i]<=num_2[j]){
                double tmp=num_2[i];
                num_2[i]=num_2[j];
                num_2[j]=tmp;
                 tmp=num_1[i];
                num_1[i]=num_1[j];
                num_1[j]=tmp;
                 tmp=num[i];
                num[i]=num[j];
                num[j]=tmp;
            }
           //  printf("%lf %lf %lf\n",num[i],num_1[i],num_2[i]);
         }
    }
  //  cout<<endl<<endl<<endl;
    for(int i=0;i<n;i++){
     //   printf("%lf %lf %lf\n",num[i],num_1[i],num_2[i]);
    }
    double sum=0.0;
    int flag=0;
    for(int i=0;i<n;i++){
        if(m>=num[i]){
           m=m-num[i];
           sum+=num_1[i];
            //cout<<sum<<endl;
        }
       else if(m<num[i]){
            sum+=(double)(m*num_1[i]/num[i]);
           flag=1;
        }
       // cout<<m<<" "<<sum<<" "<<endl;
        if(flag==1) break;
    }
    printf("%.2lf",sum);
    return 0;
}
  • 首先是关于ifif和elseelse ifif在一起用时的情况:假如同时进行两个条件语句的判断也就是if();if();if();if();那么第一个if判完后就有可能第二个if会判,实际上二者是选其一的关系,这是我第一次错误时忽略的。其他时候也尽量不要写if();else();if();else();除非你已经对elseelse中的范围很清楚,不然这就可能是你的一个很难发现的错误点;所以尽量写if();elseif();else if();if();这样就能面面俱到。(这种错误我犯了很多次,大家一定要注意)
  • 然后最重要的细节是temptemp临时变量的数据类型的定义上,我找了好久才找出来,就因为把它定义为了intint类型,直接导致了我在排序的过程中单价的精度没了,这是很需要注意的!
2024/5/25 15:25
加载中...