百練 / 2016電腦學科夏令營上機考試: E

來源:互聯網
上載者:User

題目來源:http://noi.openjudge.cn/ch0206/2421/ 2421:Exchange Rates

總時間限制: 1000ms      記憶體限制: 65536kB

描述

Now that the Loonie is hovering about par with theGreenback, you have decided to use your $1000 entrance scholarship to engage incurrency speculation. So you gaze into a crystal ball which predicts theclosing exchange rate between Canadian and U.S. dollars for each of the nextseveral days. On any given day, you can switch all of your money from Canadianto U.S. dollars, or vice versa, at the prevailing exchange rate, less a 3%commission, less any fraction of a cent. 
Assuming your crystal ball is correct, what's the maximum amount of money youcan have, in Canadian dollars, when you're done? 

輸入

The input contains a number of test cases, followed by aline containing 0. Each test case begins with 0 <d ≤ 365, thenumber of days that your crystal ball can predict. d lines follow, giving theprice of a U.S. dollar in Canadian dollars, as a real number.

輸出

For each test case, output a line giving the maximumamount of money, in Canadian dollars and cents, that it is possible to have atthe end of the last prediction, assuming you may exchange money on any subsetof the predicted days, in order.

範例輸入

3

1.0500

0.9300

0.9900

2

1.0500

1.1000

0

範例輸出

1001.60

1000.00

-----------------------------------------------------

解題思路

動態規劃,分別維護更新當前美元最大收益和當前加元最大收益。不用開數組,用4個變數就行。

兩個坑點:

1. 計算中要用分為單位用int變數計算

2. 輸出的時候要保留兩位小數精度,例如這樣就可以AC

ans0 = thecanada/100;ans1 = thecanada%100;printf("%d.%02d\n",ans0,ans1);

-----------------------------------------------------

代碼

#include<stdlib.h>#include<iostream>#include<fstream>#include<iomanip>#include<stdio.h>using namespace std;int main(){    #ifndef ONLINE_JUDGE    ifstream fin("xly2016E.txt");    if (!fin)    {        exit(1);    }    int d = 0, i = 0;    double therate = 0;    int theusa = 0, thecanada = 0, n_usa = 0, n_canada = 0;    int ans0 = 0, ans1 = 0;    while (fin >> d)    {        if (d==0)        {            break;        }        thecanada = 1000*100;                               // 以“分”為單位        theusa = 0;        for (i=0; i<d; i++)        {            fin >> therate;            n_usa = thecanada/therate*0.97;                   // 將第i-1天開始持有的加元換成美元            theusa = n_usa>theusa? n_usa:theusa;              // 與繼續持有第i-1天的美元比較取大者            n_canada = theusa*therate*0.97;                   // 將第i-1天開始持有的美元換成加元            thecanada = n_canada>thecanada? n_canada:thecanada;// 與繼續持有第i-1天的加元比較取大者        }        ans0 = thecanada/100;        ans1 = thecanada%100;        printf("%d.%02d\n",ans0,ans1);    }    fin.close();    #endif // LOCAL FILE    #ifdef ONLINE_JUDGE    int d = 0, i = 0;    double therate = 0;    int theusa = 0, thecanada = 0, n_usa = 0, n_canada = 0;    int ans0 = 0, ans1 = 0;    while (cin >> d)    {        if (d==0)        {            break;        }        thecanada = 1000*100;                               // 以“分”為單位        theusa = 0;        for (i=0; i<d; i++)        {            cin >> therate;            n_usa = thecanada/therate*0.97;                   // 將第i-1天開始持有的加元換成美元            theusa = n_usa>theusa? n_usa:theusa;              // 與繼續持有第i-1天的美元比較取大者            n_canada = theusa*therate*0.97;                   // 將第i-1天開始持有的美元換成加元            thecanada = n_canada>thecanada? n_canada:thecanada;// 與繼續持有第i-1天的加元比較取大者        }        ans0 = thecanada/100;        ans1 = thecanada%100;        printf("%d.%02d\n",ans0,ans1);    }    #endif // ONLINE_JUDGE}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.