2017-06-15 8 views
0

私はこの簡単な質問に問題があります。ループの場合はで解決できましたが、/ elif/elseの場合はだけでした。これに取り組む方法の提案?チョコレートバーをif/elif/elseで分割します。

質問:

チョコレートバーは、m×n個の部分に分割された矩形の形状を有しています。 チョコレートバーは、パターン上で選択した直線に沿って に分割することで、2つの長方形部分に分割できます。 分割が可能であるかどうかを判断して、パーツの1つが正確にk の正方形を持つようにします。プログラムは、n、m、およびkの3つの整数を読み込みます。 YESまたはNOを出力する必要があります。

私の解決策ですが、入力が(4,2,6)の場合、答えは正しくありません。

n = int(input()) 
m = int(input()) 
k = int(input()) 

if k/max(n,m) % 1 == 0 and k/max(n,m) <= min(n,m): 
    print('YES') 
else: 
    print('NO') 
+1

「k/max(n、m)%1」は常に0 ... –

+0

forループを使用すると何が問題になりますか?また、他にどのようなリソースがありますか?例えば、 'k'の素因数分解を返すルーチンを使うことができますか? –

+0

他にどのようなリソースがあるかはあまり明確ではありません。 – DatCra

答えて

3

そこで問題は、基本的に求めている:N、MおよびKの所与のため

、んが存在する二つの数字、AとB、よう*のB = Kであり、ここでのいずれか= nおよびb < mまたはa = mおよびb < n。

あなたは、この条件にすることを解決することができます:

n = int(input()) 
m = int(input()) 
k = int(input()) 

if (k % n == 0 and k/n < m) or (k % m == 0 and k/m < n): 
    print('YES') 
else: 
    print('NO') 

あなたが忘れているものは、それが上から下へまたは左から右へのからカットすることができるということです。

+0

正確に同じコードをポストするつもりでしたが、2つのケースでは 'elif'を使用しました。 '<= 'ではなく' <'を使うと、バーが実際に破られる必要がある(つまり、k = n * mが" NO "を出力する)という条件が強制されることは注目に値するかもしれません。 –

関連する問題