4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

Paiza×Qiitaキャンペーン 「残り物の量(Cランク相当)」をPythonで1行で解く

Last updated at Posted at 2024-08-29

ステップ1:問題の意味を理解する

最初に問題文を読んでみましょう。
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/leftover

問題の要旨としては、「最初は生のままで売り、売れ残ったら惣菜にする。それでも売れ残ったら残り物として計算する。」といった感じです。

ステップ2:計算式を考える。

1.生のままの販売

m[kg]の生鮮食品を仕入れ、そのうちp[%]が売れました。よって、売れた量は、m×(p/100)[kg] です。したがって、売れ残った量は、 m-m×(p/100)=m×(1-p/100)[kg]

2.惣菜としての販売

次に、売れ残った量(m×(1-p/100)[kg])をすべて惣菜にします。この惣菜のうちq[%]が売れました。よって、惣菜で売れた量は、m×(1-p/100)×(q/100)[kg] です。したがって、惣菜として売れ残った量は、 m×(1-p/100)-m×(1-p/100)×(q/100)=m×(1-p/100)×(1-q/100)[kg]

3.最終的な売れ残り量

1と2より、生鮮食品のうち最終的に売れ残った量は、 m×(1-p/100)×(1-q/100)[kg]

ステップ3:プログラムを書く

ステップ2で作った計算式をもとにプログラムを書きます。

m,p,q=map(int,input().split())#入力を受け取る
keisan=m*(1-p/100)*(1-q/100)#計算する
print(keisan)#出力する

ステップ4:1行にする

print((lambda m,p,q:m*(1-p/100)*(1-q/100))(*map(int,input().split())))

解説

1.input().split() でスペース区切りの入力を取得し、map(int, ...) で整数に変換する。
2.lambda m,p,q:m*(1-p/100)*(1-q/100) という無名関数(ラムダ関数)を使い、引数 m,p,q を受け取って計算を行う。
3.1で取得した値が lambda 関数に引数として渡される。
4.結果が出力される。

補足

2の無名関数を普通の関数で書くとこうなります。

#無名関数
(lambda m,p,q:m*(1-p/100)*(1-q/100))
#ふつうのかんす
def keisan(m,p,q):
    return m*(1-p/100)*(1-q/100)

注意:プログラムを1行で書くと可読性が著しく低下するので、共同作成プロジェクト等ではやらないようにしましょう

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?