首页 > 其他 > 详细

2512 重排列得到2的幂

时间:2019-04-15 20:10:58      阅读:249      评论:0      收藏:0      [点我收藏+]

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;
}

 

技术分享图片

 

2512 重排列得到2的幂

原文:https://www.cnblogs.com/dajie/p/10712721.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!