格式-分解二進制數字 n 成兩個數字 a(n), b(n) +

问题描述

分解二進制數字 n 成兩個數字 a(n), b(n) +

Splitting Numbers(數字分解)
分解二進制數字 n 成兩個數字 a(n), b(n) 的定義如下:
若 0<= i1<i2<... <ik分別代表數字 n 中位元值為 1 的位元索引(最小索的引值為0)。
然後數字 a(n) 中位元值為 1 的位元索引分別為i1, i3, i5, ...
以及數字 b(n) 中位元值為 1 的位元索引分別為i2, i4, i6, ...
(與具有索引0的至少顯著位)在N屬於的位元1。
然後a(n)為索引位元是1的i1,i3,i5,......以及b(n)為索引位元是1的i2,i4,i6,......
例如,若數字 n 的二進制數為 1101101012,則 a = 0100100012 和 b = 1001001002。
輸入規範
每個測試案例含單一的整數 n 其值介於 1 和 231 - 1 之間。整數 0 代表終止輸入,不用處理。
輸出規範
每個測試案例輸出一行,包含整數 a(n) 和 b(n) 用一個空格隔開,皆以十進制格式輸出。

解决方案

// ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "math.h"
#include <iostream>

using namespace std;

void shownum(int num)
{
    int shift = 1 << (int)log2(num);
    while (shift > 0)
    {
        cout << num / shift;
        num = num % shift;
        shift /= 2;
    }
    cout << endl;
}

int tonum(string num)
{
    int r = 0;
    for (int i = 0; i < num.length(); i++)
    {
        r *= 2;
        r += num[i] == '0' ? 0 : 1;
    }
    return r;
}

int _tmain(int argc, _TCHAR* argv[])
{
    string input = "110110101";
    string mask1 = "101010101";
    string mask2 = "010101010";
    int x = tonum(input) & tonum(mask1);
    int y = tonum(input) & tonum(mask2);
    shownum(x);
    shownum(y);
    return 0;
}

解决方案二:

100010101
10100000
Press any key to continue . . .

解决方案三:

你的例子好像是错的,或者你的描述是错的。

解决方案四:

我晕,这么复杂的,建议哪个算法的老师看看,帮你写一下

或者你总结个大家都通用的算法,这样的例子比较多

时间: 2024-09-05 13:24:19

格式-分解二進制數字 n 成兩個數字 a(n), b(n) +的相关文章

怎样创建时间Time1类Hour、Minute、Second,它们用于表示采取统一时间格式(24小时制)的一个时间。并定义一个不含参数的ToUniwersalString方法,该方法采取统一的格式返回一个字符串,它包括6个数位——两个用于表示时间,两个用于

问题描述 怎样创建时间Time1类Hour.Minute.Second,它们用于表示采取统一时间格式(24小时制)的一个时间.并定义一个不含参数的ToUniwersalString方法,该方法采取统一的格式返回一个字符串,它包括6个数位--两个用于表示时间,两个用于表示分钟,两个用于表示秒.创建Time1类的两个实例,编译和测试Time1类. 解决方案 解决方案二:publicvoidInitializeTimer(){this.timerClock.Elapsed+=newElapsedEve

ios7自带的二维码扫描api不能支持gbk格式的二维码吗

问题描述 ios7自带的二维码扫描api不能支持gbk格式的二维码吗

button-大神們 幫忙看下這個數組越界異常...

问题描述 大神們 幫忙看下這個數組越界異常... public class Example implements EntryPoint { AbsolutePanel absolutePanel =new AbsolutePanel(); Button reset = new Button("Reset"); Button[][] buttons = new Button[20][20]; Grid grid = new Grid(); public Example(){ absolu

一个土豪玩家养十个免费玩家陪自己玩 免费游戏的关键在一个“诱”字,核心在一个“贱”字,本质是一个“骗”字

"老子玩游戏从来是不花钱的!"多年来这一直是中国玩家最引以为傲的地方,从过去的"盗版下载"到如今的"免费游戏",始终如此,优越感秒杀美欧日韩! 可以说得益于中国独特的游戏环境,在这片土地上孕育了一批可能是世界上最抠门的玩家,"如何让中国玩家为游戏掏钱"简直是一个世界性难题!当然天才的中国运营商最终找到了为这些铁公鸡拔毛的办法. "免费游戏"模式最早出现于国内的一些私服,之后<热血传奇><传

格式 webp-谷歌的webp图片格式如何在windows下使用java转换成其他格式

问题描述 谷歌的webp图片格式如何在windows下使用java转换成其他格式 参考了http://blog.csdn.net/geeklei/article/details/41147479,可以在linux下成功执行,但是在windows下编译出dll和jar始终无法正确运行java.lang.IllegalArgumentException: image == null!无法识别这样的图片格式 解决方案 Java webp转jpg webp是最近google推出的新的图片格式 googl

Photoshop制作质感金属字教程 Photoshop怎么绘制金属字

           Photoshop制作质感金属字教程  Photoshop怎么绘制金属字     1.在ps软件中,新建一个800*800的文档,背景色为黑色,写上灰色的字体,如图所示 2.然后双击字体的图层样式,调整一下斜面浮雕,如图所示 3.然后再调整一下外发光,如图所示 4.接着在滤镜库中添加纹理化,如图所示 5.字体的图层和背景层合并,然后在滤镜中添加镜头光晕,如图所示 6.效果如下图所示

WPF中将16进制颜色码转换成SolidColorBrush

原文:WPF中将16进制颜色码转换成SolidColorBrush 使用ColorConverter.ConvertFromString(string colorValue)方法 例如:new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFD3CFC7"));

年度网络热字的冷思考:被字折射社会意识进步

■背景提示 "汉语盘点2009"年度字词网络征集活动2月6日落下帷幕,"被"."民生"."浮"."金融危机"分列年度国内字.国内词.国际字.国际词第一. 由国家语言资源监测与研究中心网络媒体语言分中心.商务印书馆等单位联合主办的此次网络征集评选活动,历时一月,最终评选出描述2009年中国和世界的一个字.一个词.年度国内字紧随"被"字其后的,是"牛"."稳&q

140字微博成营销新空间

最近,微博营销已经显得越来越受关注,俨然成为最新潮.最火爆的营销方式之一.越来越多的企业意识到了微博巨大的营销潜力.日前,<中国文化报>刘敏在综合陈永东等业内人士的观点后,于9月30日在<中国文化报>的十版刊出了相应的文章,内容如下. 140字微博成营销新空间 运营成本低传播效果好 中国微博用户的爆炸式增长,让众多企业看到微博营销的潜力.近日,网钻品牌Bloves选择通过官方微博举行新品发布会,继而抛出"免费赢取万元钻戒活动":只要成为其微博粉丝,转发并评论该微