ダウンロード(Easy)
ダウンロード(Easy)
問題文を整理して書き換えてみます。
- ダウンロードするファイルは全部で S 個
- 1ファイルは A MB
- T 個のファイルがダウンロード済み
あなたは、複数のファイルをダウンロードしています。現在の進捗率を整数で求めてください。
- A MB × T 個 ダウンロード済
- 全ファイルのサイズは A MB × S 個
『進捗率をダウンロードが終わったファイルのデータ量の総和(ここでは, A MB×T個)を全てのファイルのデータ量の総和(ここでは, A MB×S個)で割り、百分率に直したものとします。』
→ A MB × T 個 を、A MB × S 個 で割ります。
(A × T) ÷ (A × S) × ヒミツ😉
この結果を整数にして画面に出力すれば完了です。オリンピックのスコア
オリンピックのスコア
- 全部足す sum()
- 最大値を引く max()
- 最小値を引く min()
それぞれ関数を使ってプログラムを組んでみてください。
次のごはん
次のごはん
「次のごはん」なので、現在ごはん中でも次のごはんのことを考えます。🤣
条件に『(H,M) は (7,0),(13,0),(19,0) のいずれとも異なる』とあります。7時、13時、19時ぴったりの時刻が与えられることはないということです。これは7時、13時、19時ぴったりの時刻は次のごはんのことを考えるのかどうかが曖昧になり、混乱してしまう恐れがあるので、これを回避するためかと思われます。
ちなみに「分」は無視しても大丈夫なはずです。8時36分の場合は「8時台」と考えます。
文を使って次のごはんがどれになるのかを判定することになりますが、気をつけてください。少しばかり罠が仕込まれています。問題文と条件をよく読んで罠を見つけてみましょう。
- H % 19
条件式が複雑でめんどくさくてワケわからなくなってしまったら、思考を変えて、0時またぎを無くしてみましょう。
0時 → 0
1時 → 1
2時 → 2
3時 → 3
4時 → 4
5時 → 5
6時 → 6
7時 → 7
8時 → 8
9時 → 9
10時 → 10
11時 → 11
12時 → 12
13時 → 13
14時 → 14
15時 → 15
16時 → 16
17時 → 17
18時 → 18
19時 → 0
20時 → 1
21時 → 2
22時 → 3
23時 → 4
0 〜 6 : breakfast
7 〜 12 : lunch
13 〜 18 : dinner
19時台から23時台は、0時台から6時台と同じグループ扱いとなります。つまり19時1分〜23時59分は、0時〜6時59分と同じく朝ごはんのことを気にしていることになりますので、要件に一致しますね。はよ寝ろ!😂
こうすれば、条件文が書きやすくなると思いますよ。😊
ダウンロード(Hard)
ダウンロード(Hard)
Easyの時は数値(T)だけで進捗率を求めましたが、Hardでは進捗バー(o)から進捗率を求めます。ダウンロードするファイル数は5と定まっています。
i | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | 13 | 17 | 77 | 89 | 25 |
T | o | o | x | x | x |
予め 0 で初期化した変数を用意し、単純に T_i が o
の時に、A_i を用意した変数に足していくだけです。この時、以下のように入力を5つずつ受け取った時、
A_1, A_2, A_3, A_4, A_5 = map(int, input().split())
T_1, T_2, T_3, T_4, T_5 = input().split()
A_i と T_i を比較する 文を5つ分用意すれば求められます。
『もっと良い方法無いのかな?』
至高のプログラムを求めてそう考えられることはとても良いことです。しかしこれ以上のことをするとなるとCランクレベルのスキルが必要となりますので、今はここまでということにしておきましょう。
大丈夫!ここまでできれば、もうCランクの問題集に余裕で進めるよ!