ACM模版

描述

题解

对n不断拆解即可,有些贪心的意味。

代码

#include <stdio.h>
#include <string.h>

int main()
{
    int T;
    scanf("%d", &T);

    while (T--)
    {
        int n;
        scanf("%d", &n);
        if (n == 1)
        {
            printf("0\n");
            continue;
        }

        int sum = 0;
        if (n & 1)
        {
            n -= 1;
            sum = 1;
        }
        while (n != 1)
        {
            n /= 2;
            if (n & 1 && n != 1)
            {
                n -= 1;
                sum++;
            }
            sum++;
        }
        printf("%d\n", sum);
    }

    return 0;
}