题目链接http://toutiao.com/a6320936270101528833/

为避免链接失效,再粘贴一下题目内容:

给你一个数n,有3种操作:

1.这个数加1

2.这个数减1

3.如果这个数是2的倍数,那么这个数除以2

问给你一个数n,问最少经过多少步,可以把这个数变成1

 

链接文章作者给出的解题思路是:

1. 如果末尾是0,那么直接除以2.

2.如果末尾是1,并且末尾连续1的个数小于

3,那么优先选择剪发,然后开始除法。 3.如果末尾超过连续3个1,那么先使用加法,再使用除法。

4,我们把n转成2进制,然后从低位开始,按上面的策略操作。

作者:头条号 / 沙茶敏碎碎念
链接:http://toutiao.com/a6320936270101528833/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

下面给出c++源码,借助移位操作实现解题。

#include "stdafx.h"
#include<iostream>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"请输入需要变成1的正整数:";
cin>>n;
int temp=n;
int num=0; //num表示经过的计算次数
while(n>1)
{
if ((n&1)==0) //末位为0
{
n=n>>1;
num++;
}
else if ((n&1)==1&&((n>>1)&1==1)&&((n>>2)&1)==1) //末尾连续三个1
{
n=n+1;
n=n>>3;
num+=4;
}
else
{
n=n-1;
n=n>>1;
num+=2;
}
}
cout<<"数字"<<temp<<"变成1经过的最少计算次数为:"<<num<<endl;
return 0;
}

实际运算结果如下:

24/2=12

12/2=6

6/2=3

3-1=2

2/2=1

13-1=12

12/2=6

6/2=3

3-1=2

2/2=1

23+1=24

24/2=12

12/2=6

6/2=3

3-1=2

2/2=1

题目的关键在于找到解题规律,否则很难下手写代码。

贪心算法——将正整数变为1的更多相关文章

  1. 算法导论----贪心算法,删除k个数,使剩下的数字最小

    先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...

  2. HDU2037 今年暑假不AC 贪心算法

    贪心算法 : 贪心算法就是只考虑眼前最优解而忽略整体的算法, 它所做出的仅是在某种意义上的局部最优解, 然后通过迭代的方法相继求出整体最优解. 但是不是所有问题都可以得到整体最优解, 所以选择贪心策略 ...

  3. 剑指Offer——贪心算法

    剑指Offer--贪心算法 一.基本概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.虽然贪心算法不能对 ...

  4. 月饼问题PAT B1020(贪心算法)

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...

  5. #C++初学记录(贪心算法#结构体#贪心算法)

    贪心算法#结构体 Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋 ...

  6. python常用算法(6)——贪心算法,欧几里得算法

    1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...

  7. LeetCode解题记录(贪心算法)(二)

    1. 前言 由于后面还有很多题型要写,贪心算法目前可能就到此为止了,上一篇博客的地址为 LeetCode解题记录(贪心算法)(一) 下面正式开始我们的刷题之旅 2. 贪心 763. 划分字母区间(中等 ...

  8. 【ybtoj】贪心算法例题

    [基础算法]第二章 贪心算法 例一 奶牛晒衣服 题目描述 有n件衣服,第i件衣服的湿度为h. 在自然条件下,每件衣服每分钟都可以自然晒干A点湿度. 在烘干机作用下,可以选择一件衣服,用一分钟的时间晒干 ...

  9. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

随机推荐

  1. html5 之 canvas 相关知识(一)概念及定义

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  2. this.class.getClassLoader()怎么理解?

    this.class.getClassLoader()怎么理解? java是面向对象语言,面向对象的语言的宗旨就是万事万物皆对象,那么类也是一个对象,类里面的属性和方法也是对象.java里面的所 有的 ...

  3. ZooKeeper(3.4.5) - 原生 API 的简单示例

    一.创建会话 1. 创建一个基本的ZooKeeper会话实例 package com.huey.dream.demo; import java.util.concurrent.CountDownLat ...

  4. Ajax-数据格式-html

  5. PSP个人软件开发工具需求分析文档

    第一部分:前景与范围 1.业务需求 1.1 背景 在目前的软件项目开发过程中,进度计划总是非常不准确,经常出现延期,而且大多数都无法给出一个相对比较准确的延迟时间.即使使用用例包.用例的方式组织需求, ...

  6. MSSQL 数字钱转化为大写

    --说明: --1.本函数范围从 毫 ~ 兆 --2.有四种精度(元,角 ,分,厘 ,毫) --3.有三种进位规则(四舍五入,接舍去,非0就入) --参数说明:dbo.MoneyToCapital( ...

  7. (转)SqlServer数据库大型应用解决方案总结

    随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题. 一 ...

  8. 插件笔记——dataTables使用说明

    jquery DataTables中文使用说明 出处:http://blog.vunso.com/201405/jquery-datatables%E4%B8%AD%E6%96%87%E4%BD%BF ...

  9. 09_Java8操作集合的一些新特性

    [使用forEach()结合Lambda表达式遍历集合] public class ForEachDemo { public static void main(String[] args) { Col ...

  10. <c:forEach>用法

    <c:forEach items="${xqsCheckDataList}" var="ch"> <c:if test="${ch. ...