獣医の秘密
5036 ワード
Weeklyvita第2四半期コードテスト比較入門編
고대 유적지를 연구하던 인디아나 홍스는
유적지의 벽에 새겨진 엄청난 숫자들을 발견했다.
벽에 새겨진 숫자 중 일부는 비밀스러운 정보를 조회할 수 있는
열쇠 역할을 하는 비밀스러운 수이다.
오랜 연구 끝에 인디아나 홍스는 엄청난 숫자들이
특별한 규칙을 가지고 있다는 사실을 발견하였다.
엄청난 숫자들 중 의미있는 숫자들은
항상 2^k(0<=k) 형태로 적혀 있고,
그 외의 수들은 모두 비밀스러운 정보와는 관련 없다는 것이다.
인디아나 홍스를 도와 벽에 새겨진 숫자가
비밀스러운 정보인지 아닌지를 판별해보자!
✔υ入力
最初の行の数字を指定します.
この数は
10^18
以下の自然数です.勘定科目の出力
与えられた数字が機密情報を含む場合、
Yes
である.そうでない場合、出力
No
.💡 example1
input
32
outputYes
💡 example2
input
1
outputYes
💡 example3
input
10
outputNo
🔑 解説
入力値には数値があります.
この数は
10^18
以下の自然数です.△読数範囲を教えてくれる理由を考えてください.
変数
num
を宣言して入力値を受け入れます.int num = 0;
関数scanf
を使用して入力値を受け入れます.scanf("%d", &num);
受け取った価格が正しいかどうかをテストしたほうがいいです.もしあなたが価格を手に入れることに成功したら、
問題の要求に集中しましょう.
この問題は、
2の繰返し二乗で表すことができる場合、出力
Yes
.そうでなければ
No
と書きます.では、まずすべての奇数を除外します.
num % 2 == 0
の条件を利用することが望ましい.二乗で表すことができます.
これは、分割を繰り返すときに分割することを意味します.
複文を用いた.
while (num % 2 == 0)
num /= 2;
2
の倍数を2
で割った.シェアは最終的に
1
だった.Yes
を出力するか、No
を出力するかは、2つの条件文で表すとよい.if (num == 1)
{
printf("Yes");
return (0);
}
else
{
printf("No");
return (0);
}
各文を出力し、return (0);
でプログラムを終了します.注意事項
前述したように、
問題で与えられた
example case
はいずれも通過することができる.コミット時に
Timeout
が発生します.値を入力するには再考が必要です.
10^18
以下の自然水.この範囲の最低価格から見ると、かなりの数と言えます.
最初は、複文の中で
Timeout
が起こったと思います.どれだけ駆動できるか確認しましたが、
2^31
までは正常にコンパイルされています.しかし、出力値は正しくありません.
もちろん
2
の平方数を計算して加えたものです.Yes
を出力するはずですが、No
を出力しました.テスト中に新しいホットスポットが現れました.
しかし、ふと一つの考えが浮かんだ.
type
です.入力値を受信した変数
num
がint
として宣言される.入力値は自然数のみです.
unsigned long int
に変えてテストをしましたが、Yes
出力済み...!こうして、
type
を変更して提出し、結果はAll passを獲得!これは条件をもう一度よく検討する必要がある問題である.
Github_Repository
Reference
この問題について(獣医の秘密), 我々は、より多くの情報をここで見つけました https://velog.io/@eugenie8/수의-비밀-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol