四捨五入的小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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章