欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

四舍五入的小trick

程序员文章站 2023-12-31 16:57:52
...

题意:传送门
题解:分类如果按照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;
}
相关标签: trick

上一篇:

下一篇: