Leyanshi
Articles2
Tags4
Categories0

一言

Archive

洛谷笔记0001

洛谷笔记0001

今日(和昨日)过招

难题

难题是 P1089 津津的储蓄计划;题目根本理不清头绪,点进“题目反馈”发现一个修正,这个版本好多了。
a04f1907-aa11-4642-8aa7-0b2edc55736d.png
原始代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;

int main() {
vector<double> moneys(12, 0);
// not negative numbers, 100rmb:1moneys
for (int i = 0; i < 12; i++) {
cin >> moneys[i];
moneys[i] = moneys[i] / 100;
}
double walletMoney = 0;
double bankMoney = 0;
for (int i = 0; i < 12; i++) {
walletMoney += 3;
bankMoney += floor(walletMoney - moneys[i]);
walletMoney -= floor(walletMoney - moneys[i]);
walletMoney -= moneys[i];
if(walletMoney<0){
cout << -(i + 1);
break;
}
}
cout << walletMoney * 100+bankMoney*100*1.2;
return 0;
}

经过自(迪)我(普)找(西)错(克),我找出了错误:

  1. bro的按张保存的制度太™复杂了
  2. bro忘记输出负数月份了(没看题)
    可能还有忘记了的错误,反正bro重写了一遍,如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <iostream>
    using namespace std;

    int main() {
    int budget[12];
    for (int i = 0; i < 12; i++) {
    cin >> budget[i];
    }

    int hand = 0;
    int mom = 0;
    for (int i = 0; i < 12; i++) {
    hand += 300;

    if (hand < budget[i]) {
    cout << "-" << i + 1 << endl;
    return 0;
    }

    int left = hand - budget[i];
    if (left >= 100) {
    int save = (left / 100) * 100;
    mom += save;
    hand = left - save;
    } else {
    hand = left;
    }
    }
    int total = mom * 1.2 + hand;
    cout << total << endl;

    return 0;
    }

得到的经验

  1. 永远不要给一个题目乱换单位
  2. 别™整太复杂
  3. int除一下再乘回来可以向下取整