蓝桥杯—ALGO-12 幂方分解

问题描述
  任何一个正整数都可以用2的幂次方表示。例如:
  137=27+23+20
  同时约定方次用括号来表示,即ab 可表示为a(b)。
  由此可知,137可表示为:
  2(7)+2(3)+2(0)
  进一步:7= 22+2+20 (21用2表示)
  3=2+20
  所以最后137可表示为:
  2(2(2)+2+2(0))+2(2+2(0))+2(0)
  又如:
  1315=210 +28 +25 +2+1
  所以1315最后可表示为:
  2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输入格式
  输入包含一个正整数N(N<=20000),为要求分解的整数。
输出格式
  程序输出包含一行字符串,为符合约定的n的0,2表示(在表示中不能有空格)

分析:递归

代码:

#include<iostream>
#include<cmath>
using namespace std;
int N;
void solve(int v) {
    while(v) {
        if(v == 2) { printf("2"); break; }
        if(v == 1) { printf("2(0)"); break; }
        int i = 1;
        int a = 4;
        while(a <= v) {
            a *= 2;
            i++;
        }
        printf("2");
        if(i != 1) {
            printf("(");
            solve(i);
            printf(")");
        }
        v -= pow(2, i);
        if(v) printf("+");
    }
}
int main() {
    cin >> N;
    solve(N);
    return 0;
}

原文地址:https://www.cnblogs.com/kindleheart/p/8423232.html

时间: 2024-10-14 13:11:02

蓝桥杯—ALGO-12 幂方分解的相关文章

[ALGO-12] 幂方分解

算法训练 幂方分解 时间限制:1.0s   内存限制:256.0MB 问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20  同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示) 3=2+20  所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如: 1315=210 +28 +25 +2+1 所以1315最后可表示为: 2(

算法训练 幂方分解

问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20  同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示) 3=2+20  所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如: 1315=210 +28 +25 +2+1 所以1315最后可表示为: 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(

蓝桥杯_基础练习《分解质因数---28》

/* 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例) 样例输入 3 10 样例输出 3=3 4=2*2 5=5 6=2*3 7=7 8=2*2*2 9=3*3 10=2*5 提示 先筛出所有素数,然后再分解. 数据规模和约定 2<=a<=b<=10000 */ #include<stdio.h> #i

蓝桥杯 BASIC-10~12 进制转化

十进制转十六进制 [AC代码]:更简单采用直接输出的方式. #include <iostream> #include <algorithm> #include <cstdio> using namespace std; int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n

蓝桥杯 algo——6 安慰奶牛 (最小生成树)

问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计 划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性.你首先要决定那些道路是需要保留的N-1条道路.第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间.没有两个牧场是被一条以上的道路所连接.奶牛们非常伤心,因为她们的交通

算法训练 幂方分解 递归

http://lx.lanqiao.cn/problem.page?gpid=T72 #include <iostream> using namespace std; int n; void print(int n) { bool flag=false; for(int i=30;i>=0;i--) { int c=(n>>i)&1;//从高位开始 if(c) { //前面有表达式就有加号 if(flag) printf("+"); if(i==1

蓝桥杯 - 2的次幂表示 (递归)

题目传送:蓝桥杯 - 2的次幂表示 思路:这递归递的我头都晕了,先贴个伪递归吧 AC代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; void fun1(int a) { //输出2的a次方,因为题目最大就20000,2的15次方足以 if(a == 0) printf("2(0)"); else if(a == 1) printf(&

蓝桥杯 地宫取宝(12&#39;)

X 国王有一个地宫宝库.是n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大, 小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. [数据格式] 输入一行 3个整数,用空格分开:n m

蓝桥杯——说好的进阶之和式分解

对于正整数 n,输出和等于 n且组成和式的数字从左至右是非递增的所有正整数和式. 输入: 6 输出: 6=6 6=5+1 6=4+2 6=4+1+1 6=3+3 6=3+2+1 6=3+1+1+1 6=2+2+2 6=2+2+1+1 6=2+1+1+1+1 6=1+1+1+1+1+1 import java.util.Scanner; public class Main{ static int[] a = new int[1000]; public static void main(String