0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ログ】Atcoder Beginner Contest 068 B - Break numbers

Posted at

問題文

正整数 N が与えられるので、1 以上 N 以下の整数のうち、最も 2 で割れる回数が多いものを求めてください。答えは必ず 1 つに定まります。

入力と出力

N

問題の答えを出力する

ACコード

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
    int n;
    cin >> n;
    int ans = -1;
    int maxcnt = -1;


    for (int i=1; i<n+1; i++) {
        int counter = 0;
        int y = i;
        while (y % 2 == 0) {
            counter++;
            y /= 2;
        }
    if (maxcnt < counter) {
        maxcnt = counter;
        ans = i;
    }

    }    
    cout << ans << endl;
}

失敗したこと/学んだこと

  • 失敗コード
for (int i=1; i<n+1; i++) {
        int counter = 0;
        while (i % 2 == 0) {
            counter++;
            i /= 2;
        }
    if (maxcnt < counter) {
        maxcnt = counter;
        ans = i;
    }

while内でforで宣言したiを直接操作してしまっている。なのでforと同じレイヤーにあるif内でiが書き換えられてしまった。

  • for文内でカウンタ変数を使って操作をしたい場合は一度コピーを作ってから行う。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?