贪心算法——将正整数变为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)
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...
随机推荐
- Swift下标
还记得字典吗? var numberOfLegs= ["spider": 8,"ant": 6, "cat":4] numberOfLegs ...
- Objective-C 【@property和@synthesize关键字】
------------------------------------------- @property关键字的使用及注意事项 直接上代码和注释了! // //@property关键字的使用 //① ...
- poj 2431 Expedition
Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12980 Accepted: 3705 Descr ...
- vs2010创建COM以及调用
1,创建COM组件 2,调用COM 3,MFC调用COM
- OD常用断点
OD常用断点 很全很全 常用断点 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWi ...
- Windows Phone开发之”给我好评“
课余时间搞了一年的Windows phone开发,最近又开始重拾C#编程之道,之前下载许多应用都有"给我好评"的界面,那个时候自己的应用都没有这个界面,于是到处百度谷歌,却 ...
- IIS6,IIS7 最简单的重写URL
虽然现在很少用IIS6,今天突然要把项目搬到老的服务器上(IIS6),对项目还要重新部署一下. 主要把时间花在了对url的重写上.其实很简单,如下: IIS6 网站 → 属性 → 主目录 → 配置 → ...
- vim ctags 的使用
ubantu 先安装 sudo apt-get install ctags 『基本功能使用方法』常用命令列表: 1. $ ctags –R * ($ 为Linux系统Shel ...
- javascript显示倒计时控制按钮
html: <a><span id="sendAgain" onclick="sendEmail()">2.再次发送激活邮件</s ...
- TweenMax动画库学习(四)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...