CCF NOI1021 發放獎金_NOI1021

來源:互聯網
上載者:User

問題連結:CCF NOI1021 發放獎金。


時間限制: 1000 ms  空間限制: 262144 KB

題目描述

  企業發放的獎金根據利潤分段計算提成。當利潤I低於或等於10萬元的,獎金可提10%;利潤高於10萬元,低於20萬元,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40萬的,低於20萬的部分仍按上述辦法提成(下同)。高於20萬元的部分按5%提成;40萬到60萬時,高於40萬的部分按3%提成;60萬到100萬時,高於60萬的部分按1.5%提成;I>=100萬元時,超過100萬元的部分按1%提成。輸入當月利潤I,求應發獎金總數(單位為元)。(輸出保留小數點後三位)

輸入

  輸入實數I,表示利潤。

輸出

  輸出獎金數,答案保留三位小數。

範例輸入

100000

範例輸出

10000.00
資料範圍限制

  0<I<=1,000,000


問題分析

  這個問題是一個分段計算的問題。

  寫程式時,有一種做法是將問題中給出的參數寫入程式碼中。這種做法使得程式的可修改性變差。雖然程式可以正確,但是給差評。

程式說明

  程式中,使用兩個數組來儲存問題中給定的參數。這樣使得程式的可修改性得到提高,那些參數改變時不需要修改程式碼,只需要修改數組資料。

  需要注意的是,由於資料值比較大,需要使用double類型,保證程式算出正確結果。

  程式中,宏定義符號變數N,也是增加程式通用性的有效做法。
要點詳解 使用數組儲存原始參數是一種好的做法,可以增加程式的可修改性。參數值改變時,不需要修改程式碼,只需要修改數組資料。 資料值比較大時,要使用double類型,否則結果會出錯。


100分通過的C語言程式:

#include <stdio.h>int profit[] = {0, 100000, 200000, 400000, 600000, 1000000};double ratio[] = {0, 0.1, 0.075, 0.05, 0.03, 0.015, 0.01};#define N (int)(sizeof(profit) / sizeof(int))int main(void){    double p, ans;    int i;    scanf("%lf", &p);    ans = 0;    for(i=1; i<N; i++) {        if(p <= profit[i]) {            ans += (p - profit[i - 1]) * ratio[i];            break;        } else            ans += (profit[i] - profit[i - 1]) * ratio[i];    }    if(i == N && p > profit[N - 1])        ans += (p - profit[N - 1]) * ratio[N];    printf("%.3lf\n", ans);    return 0;}




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.