四舍五入的小trick

题意:传送门
题解:分类如果按照codeforcescodeforces上的话就是最朴素的implementionimplemention,但是却卡我半天,题意也是强调(一脸苦)得用四舍五入,那么四舍五入的小trick都有哪些呢?首先了解有个roundround函数,但是可能也能直接用,这篇文章这样其实对编程而言也没啥非得纠结,另外一种就是比如直接将xx四舍五入到整数,那么x=(x*1+0.5)/1.0,那么四舍五入到几位小数也就有的写了,x=(x*100+0.5)/100.0就是保留两位小数。
附上代码(直接使用round函数):

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=70;
db stus[N][10];
int n;
db sum;
int main()
{
    sc(n);
    rep(i,1,n){
        rep(j,1,8){
            db t;
            scanf("%lf",&t);
            if(j==2&&stus[i][1]!=2)sum+=t;
            stus[i][j]=t;
        }
        if(stus[i][1]==2)stus[i][9]=0;
        else{
            stus[i][9]+=round(stus[i][3]*stus[i][4]+stus[i][5]*stus[i][6]+stus[i][7]*stus[i][8]);
        }
    }
    db res=0;
    rep(i,1,n){res+=stus[i][9]*(stus[i][2]/sum);}
    printf("%.2f\n",res);
    return 0;
}

第二种:自己手动四舍五入

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=70;
db stus[N][10];
int n;
db sum;
int main()
{
    sc(n);
    rep(i,1,n){
        rep(j,1,8){
            db t;
            scanf("%lf",&t);
            if(j==2&&stus[i][1]!=2)sum+=t;
            stus[i][j]=t;
        }
        if(stus[i][1]==2)stus[i][9]=0;
        else{
            for(int k=3;k<=7;k+=2){
                stus[i][9]+=stus[i][k]*stus[i][k+1];
            }
        }
    }
    db res=0;
    rep(i,1,n){
        int g=(int)(stus[i][9]*1+0.5)/1.0;
        res+=(g*(stus[i][2]/sum));
    }
    res=(int)(res*100+0.5)/100.0;
    printf("%.2f\n",res);
    return 0;
}
发布了535 篇原创文章 · 获赞 93 · 访问量 16万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章