dajie6

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2512 重排列得到2的幂

  1. 2 秒
  2. 262,144 KB
  3. 10 分
  4. 2 级题

小b有一个数n,现在她想把n的每一位重排列,使得得到的结果为2的幂次。

请问小b能得到2的幂次吗?

注意重排列后不允许有前导0。

样例解释:46重排列成64,为2^6。

 

收起

输入

输入一个数N,其中1≤N≤10^9

输出

满足条件,输出“true”;
不满足,则输出“false”。

输入样例

46

输出样例

true
#include <bits/stdc++.h>
using namespace std;
int a[10];
int b[30] = {1};
void init()
{
    for (int i = 1; i <= 29; i++)
        b[i] = b[i - 1] * 2;
}
int main()
{
    int n, l = 0;
    init();
    scanf("%d", &n);
    while (n)
    {
        a[l++] = n % 10;
        n /= 10;
    }
    sort(a, a + l);
    do
    {
        if(a[0]==0)
          continue;
        int t = 0;
        for (int i = 0; i < l - 1; i++)
        {
            t += a[i];
            t *= 10;
        }
        t += a[l - 1];
        for (int i = 0; i <= 29; i++)
        {
            if (t == b[i])
            {
                printf("true\n");
                return 0;
            }
            else if (t < b[i])
                break;
        }
    } while (next_permutation(a, a + l));
    printf("false\n");
    return 0;
}

 

 

posted on 2019-04-15 20:03  dajie6  阅读(143)  评论(0编辑  收藏  举报