博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法学习笔记(四)---第k个二进制数字问题
阅读量:7017 次
发布时间:2019-06-28

本文共 1252 字,大约阅读时间需要 4 分钟。

hot3.png

昨天晚上做微软的线上测试,被虐的杠杠的。。。先贴一道题出来,题目如下

140648_OLd3_1475850.jpg

重点还是思想,而且一点出来这个思想真的不难。

就是二进制数字排序问题。比如21,20的时候,排序就是:

0011,0101,0110,1001,1010,1100

仔细推测可以发现,从右到左(低位到高位)来看,若出现01分界线就一定需要交换,并且01的右边都需要头尾依次交换。

拿长一点的数字来举例,01111000下一位数字应该是10000111,其实就是最高两位01交换成10,后面六位,第一位1和最后一位0交换,第二位1和倒数第二位0交换,第三位1和倒数第三为0交换。多举几个例子就会发现这个规律绝对是正确的。

然后还稍微有个问题就是题目中要求k位输入有错要打印impossible,就是怎么判断的问题。代码简单来说就是从第一个数字前面m0后面n1开始数,数到第k个数字返回这个数就行了。可是如果k>排序组合数值呢?

一个办法就是计算一下排列组合总数为K若大于这个值就打印错误,当然比较麻烦;

第二个方法就是判断已数到最大数字,1100这种1都在高位,但是计数还没达到k,输出错误,不过还是要把整个数组都要判断一遍。

最后我用的简单方法是,因为每次找到下一位数字都肯定要交换数字,找到k程序会马上终止,如果还在循环但是没有交换数字,就判断已经达到最大排列组合。代码如下:

#include 
using namespace std;int main(void){         int m,n,k,length,flag=0,temp,impossible=0,number=0;         int num[40];         cin>>m>>n>>k;         for(int i=0;i
0;i--)                   {                   if(num[i]!=num[i-1])                   {           if (num[i]==1)                            {                                     temp=num[i];                                     num[i]=num[i-1];                                     num[i-1]=temp;                                     for(int j=i+1;j
<<"Impossible"<
<
<

转载于:https://my.oschina.net/u/1475850/blog/221777

你可能感兴趣的文章
Kali linux 2016.2(Rolling)里Metasploit连接(包括默认和自定义)的PostgreSQL数据库之后的切换到指定的工作空间...
查看>>
用jsmooth + inno生成exe并制作简单安装包
查看>>
关于spring-mvc.xml的mvc:resources元素浅析。
查看>>
Hadoop WordCount改进实现正确识别单词以及词频降序排序
查看>>
MVVM架构~knockoutjs实现简单的购物车
查看>>
ASP.NET图片上传方法总结
查看>>
【Github教程】史上最全github使用方法:github入门到精通
查看>>
一个根据列的范围分组汇总的Sql存储过程
查看>>
支点:技术选择的精髓
查看>>
swiper去除滑动设置
查看>>
Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block
查看>>
Silverlight中的Slider控件
查看>>
Redis学习笔记~分布锁的使用
查看>>
C#性能优化:延迟初始化Lazy<T>
查看>>
开源倾情奉献:基于.NET打造IP智能网络视频监控系统(二)基础类库介绍
查看>>
sublime text3 自动编译php 适合用于简单的php文件执行
查看>>
git分支管理
查看>>
玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
查看>>
C#代码生成工具:文本模板初体验 Hello,World!
查看>>
[WinAPI] API 11 [创建目录]
查看>>