POJ 1929 - Calories from Fat

http://poj.org/problem?id=1929

概要

とする. fat, protein, sugar, starch, alcohol の摂取量が g か C か % のいずれかの単位で表され,

という意味.

全体のカロリーに対して fat で摂取したカロリーが何%であるか四捨五入して整数で答える.

制約

解法

問題文の理解に一番時間がかかった.やるだけ.

 1 #include <iostream>
 2 #include <sstream>
 3 #include <vector>
 4 #include <cmath>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9   string line;
10   while (getline(cin, line) && line != "-") {
11     double fat = 0.0;
12     double sum = 0.0;
13     do {
14       istringstream iss(line);
15       bool is_percent;
16       int val;
17       int percent = 100;
18       int t = 0;
19       for (int i = 0; i < 5; i++) {
20         int n;
21         char u;
22         iss >> n >> u;
23         if (u == 'g') {
24           static const int tbl[] = {9, 4, 4, 4, 7};
25           if (i == 0) {
26             is_percent = false;
27             val = n * tbl[i];
28           }
29           t += n * tbl[i];
30         } else if (u == 'C') {
31           if (i == 0) {
32             is_percent = false;
33             val = n;
34           }
35           t += n;
36         } else {
37           if (i == 0) {
38             is_percent = true;
39             val = n;
40           }
41           percent -= n;
42         }
43       }
44       const double ttl = 100.0 * t / percent;
45       if (is_percent) {
46         fat += ttl * val / 100.0;
47       } else {
48         fat += val;
49       }
50       sum += ttl;
51     } while (getline(cin, line) && line != "-");
52     cout << lround(fat / sum * 100.0) << '%' << endl;
53   }
54   return 0;
55 }
poj/1929.cc