P9502 『MGOI』Simple Round I | A. 魔法数字

题目背景

目标越坚定的魔法士,越幸运。——殿堂魔法士 S

题目描述

初级魔法士小 M 的魔法数字是 2 2 2

给定一个正整数 n n n,小 M 需要找到最大的 偶数 m m m,使得 2 m < n 2^m2m<n

请你帮帮他。

输入格式

一行一个正整数 n n n

输出格式

一行一个 偶数 m m m,表示答案。

样例 #1

样例输入 #1

7

样例输出 #1

2

样例 #2

样例输入 #2

8

样例输出 #2

2

样例 #3

样例输入 #3

1024

样例输出 #3

8

提示

【数据范围】

对于前 20 % 20\% 20% 的数据, n = 2 n = 2 n=2

对于前 60 % 60\% 60% 的数据, n n n 2 2 2 的幂次。

对于 100 % 100\% 100% 的数据, 2 ≤ n ≤ 1 0 9 2 \le n \le 10^9 2n109

1.题目分析

题目的大概意思就是输入一个数,输出一个小于以2为底,以该数为自变量的对数函数的最大偶数。
通过循环和判断就能解决。

2.题目思路

输入一个数N,写一个while循环,判断条件为:当n小于等于2的M次方时,跳出循环,每一次M加二,
循环结束,判断:结果比N大,打印前一个偶数,结果比N小,或者等于N,直接打印。

3.代码实现

#include 
#include 

int main() {
    int n;
    int m = 0;
    scanf("%d", &n);
    //当n小于等于2的M次方时,跳出循环
    while (n > pow(2, m)) {
        m += 2;
    }
    if (pow(2, m) >= n) {
        //结果比N大,打印前一个偶数
        printf("%d", m - 2);
    } else {
        //结果比N小,或者等于N,直接打印
        printf("%d", m);
    }

    return 0;
}

你可能感兴趣的:(刷题go,go,go,算法,数据结构)