贪心算法——将正整数变为1
题目链接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的更多相关文章
- 算法导论----贪心算法,删除k个数,使剩下的数字最小
先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...
- HDU2037 今年暑假不AC 贪心算法
贪心算法 : 贪心算法就是只考虑眼前最优解而忽略整体的算法, 它所做出的仅是在某种意义上的局部最优解, 然后通过迭代的方法相继求出整体最优解. 但是不是所有问题都可以得到整体最优解, 所以选择贪心策略 ...
- 剑指Offer——贪心算法
剑指Offer--贪心算法 一.基本概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.虽然贪心算法不能对 ...
- 月饼问题PAT B1020(贪心算法)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
- #C++初学记录(贪心算法#结构体#贪心算法)
贪心算法#结构体 Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋 ...
- python常用算法(6)——贪心算法,欧几里得算法
1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...
- LeetCode解题记录(贪心算法)(二)
1. 前言 由于后面还有很多题型要写,贪心算法目前可能就到此为止了,上一篇博客的地址为 LeetCode解题记录(贪心算法)(一) 下面正式开始我们的刷题之旅 2. 贪心 763. 划分字母区间(中等 ...
- 【ybtoj】贪心算法例题
[基础算法]第二章 贪心算法 例一 奶牛晒衣服 题目描述 有n件衣服,第i件衣服的湿度为h. 在自然条件下,每件衣服每分钟都可以自然晒干A点湿度. 在烘干机作用下,可以选择一件衣服,用一分钟的时间晒干 ...
- 贪心算法(Greedy Algorithm)
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...
随机推荐
- 换模板,修改了一下css,清新多了~
基于elf template,改了一下字体颜色和背景.布局的宽度: 博客园修改css真是方便,如果可以直接编辑template代码就更赞了- 不过相对前端web自定义,我更在意后端的服务器是否稳定: ...
- RNN-theano代码解析
import theano import numpy import os import pdb from theano import tensor as T from collections impo ...
- WCF学习笔记 -- 如何用C#开发一个WebService
假设所有工程的命名空间是demo. 新建一个C#的ClassLibrary(类库)工程. 在工程引用中加入System.ServiceModel引用. 定义接口,你可以删除自动生成的代码,或者直接修改 ...
- SharePoint Server 2013介绍v2
SharePoint Server 2013介绍v2 http://wenku.baidu.com/link?url=rNYYoDmHcXmqhzOeA1sln5cS2xcnABYycBuz8Z4Oq ...
- windows系统下在dos命令行kill掉被占用的pid
备忘 1.开始-->运行-->cmd 2.命令行输入: netstat -ano I findstr 端口(被占用的端口号) 3.输入: tasklist | findstr 端口(获取步 ...
- PHP 反射 ReflectionClass
今天遇到了这样一个问题,如下代码: classA.php <?php class ClassA{ public function funcAa(){ } public function func ...
- BootStrap中Affix控件的使用方法及如何保持布局的美观
Affix是BootStrap中的一个很有用的控件,他能够监视浏览器的滚动条的位置并让你的导航始终都在页面的可视区域.一开始的时候,导航在页面中是普通的流式布局,占有文档中固定的位置,当页面滚动的时候 ...
- JQ批量控制form禁用
<script type="text/javascript" src="http://www.joy-city.com.cn/templets/default/sc ...
- Google的小秘密
google有计算器的功能,例如在google中搜索25*25.lg(13)等,看会出现什么样的结果. http://www.google.com/microsoft 微软风格的入口 http: ...
- [DevExpress]ChartControl之滚动条示例
关键代码: /// <summary> /// 设置ChartControl滚动条[默认X,Y轴都出现] /// </summary> /// <param name=& ...