算法训练 幂方分解

问题描述

  任何一个正整数都可以用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表示(在表示中不能有空格)

思路:

先对N进行幂的分解,然后对幂进行递归分解

注意:

1当某项(幂)不是最后一项(幂)的时候输出加号

2定义数组a[16](存储0,1)的时候要定义为局部变量,因为每一次数组存储的都不同

3递归的边界是0,1,2

#include <stdio.h>
int divide(int N ,int *a)
{
    int i = 0;
    while(N)
    {
        a[i++] = N%2;
        N /= 2;
    }
    return i;
}
int IsLast(int i,int *a)
{
    int k ;   //第i位前面有1,则表示a[i]不是最后一个1
    for(k=0;k<i;k++)
        if(a[k])
            return 0;
    return 1;
}
void recur(int N)
{
    int i,t;
    int a[16];
    if(N == 0 || N == 2)
    {
        printf("2(%d)",N);
        return;
    }
    else if(N == 1)
    {
        printf("2");
        return;
    }else{//N > 2
        printf("2(");
        t = divide(N,a);
        i = t-1;
        while(i >= 0)
        {
            if(a[i])
            {
                recur(i);//幂
                if(!IsLast(i,a))//不是最后一个要带加号
                    printf("+");
            }
            i --;
        }
        printf(")");
    }
}
int main()
{
    int N,i,t;
    int a[16];
    scanf("%d",&N);
    //先对N进行幂的分解,然后对幂进行递归分解
    t = divide(N,a);
    i = t-1;
    while(i >= 0)
    {
        if(a[i])
        {
            recur(i);//幂
            if(!IsLast(i,a))//不是最后一个1
                printf("+");
        }
        i --;
    }
    printf("\n");
    return 0;
}
时间: 2024-11-10 01:07:54

算法训练 幂方分解的相关文章

算法训练 幂方分解 递归

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

[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(

蓝桥杯—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的次幂表示 时间限制:1.0s   内存限制:512.0MB 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2+2^0  所以最后137可表示为:2(2(2)+2+2(0))+

1501102328-蓝桥杯-算法训练 2的次幂表示

算法训练 2的次幂表示 时间限制:1.0s   内存限制:512.0MB 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2+2^0 所以最后137可表示为:2(2(2)+2+2(0))+2

蓝桥杯 算法训练 ALGO-124 数字三角形

算法训练 数字三角形 时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 3

蓝桥杯 算法训练 ALGO-147 4-3水仙花数

算法训练 4-3水仙花数 时间限制:1.0s   内存限制:256.0MB 问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1^3+5^3+3^3. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 153xxxxxx 题目解析: 这是一道简单的暴力破解的题目.只需分解出每个三位数的百位.十位和个位,然后计算其三次方是否等于该数即可. 示例代码: 1 public class Main { 2 public static

蓝桥杯——算法训练之乘积最大

问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大. 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时

蓝桥杯 算法训练 ALGO-125 王、后传说

算法训练 王.后传说 时间限制:1.0s   内存限制:256.0MB 问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办法. 所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死...... 现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王在王宫的边上,占用的格子可能不到9个).当然,皇后也不会攻击国王.