ABC202 A 解答
A - Three Dice(4)
問題
問題文
高橋君が 3 つのサイコロを振ったところ、出た目はそれぞれ a, b, c でした。これらのサイコロについて、出た目とは反対の面が表す整数を足し合わせた値を求めてください。
ただし、高橋君が振るサイコロは全て一般的な立方体の 6 面ダイスであり、ある面とその反対側の面が表す整数を足すと 7 になります。
制約
1 ≤ a, b, c ≤ 6
入力は全て整数である。
考察
サイコロの裏面の和を求めてあげます。A問題ですので、とにかくシンプルにやってみます。
問題文にもありますが一般的なサイコロは、ある面の目とその裏の面の目を足すと7になります。1の裏は6だし、4の裏は3です。ですので、裏の目を求めたかったら、7からその数を引いてあげれば良いです。
これで裏の目が求まりましたね。あとはそれらを足し合わせてあげると答えが求まります。
7 - a + 7 - b + 7 - c
これでACが貰えます。
実装
#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;++i)
#define reps(i,s,n) for(int i=s;i<n;++i)
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
int main()
{
int a, b, c;
cin >> a >> b >> c;
a = 7 - a;
b = 7 - b;
c = 7 - c;
int ans = a + b + c;
cout << ans << endl;
return 0;
}
あとがき
もうちょっと工夫を考えてみます。式を変形すると
21-a-b-c
ですね。ですので、a,b,cを配列の0、1、2番目として受け取り、for文を回して21から引いてあげる。とすると少しだけスマートに書けます。
7-x
を複数回書くと、急いでいる場合には打ち間違えが起こるかもしれません。起こらないかかもしれません。そんなときに、ぱぱっとfor文が使えるとミスなく速く解けるかもしれませんね。
この記事が気に入ったらサポートをしてみませんか?