B 1070 结绳(考点:对题目的理解、向下取整)

    技术2026-06-14  14

    题目

    思路

    总体来说代码简单,不难。

    关键是对题目的理解,要求是能串成的绳子的最大长度。就是说越早对折的绳子,之后每一回的对折次数都会增加。 所以要让短的先,长的在后。 若按题目给出的顺序,结果会是10。

    关于向下取整,直接利用四舍五入round,如果四舍五入结果大于原数,则直接减1。(看了柳神代码……直接用了int型,系统默认向下取整了- 。-)

    AC代码

    #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; double a[n]={0}; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); static double l=a[0]; //一次定义,多次赋值 for(int i=1;i<n;i++){ l=l/2+a[i]/2; } double ans=round(l); if(ans>l) ans-=1; cout<<ans; return 0; }
    Processed: 0.012, SQL: 9