题目描述 Description

给定正整数n,你的任务是用最少的操作次数把序列1, 2, …, n中的所有数都变成0。每次操作可从序列中选择一个或多个整数,同时减去一个相同的正整数。比如,1,2,3可以把2和3同时减小2,得到1,0,1。
输入包含多组数据。每组仅一行,为正整数n(n≤109)。输入结束标志为文件结束符(EOF)。
对于每组数据,输出最少操作次数。

 输入输出格式 Input/output
输入格式:
输入包含多组数据,每组仅一行,为正整数n(n≤109),输入结束标志为文件结束符EOF
输出格式:
对于每组数据,输出最少操作次数
 输入输出样例 Sample input/output
样例测试点#1
输入样例:

1

6

输出样例:
3
 
思路:书上的思路就很好,因为数据不是很大用递归就很快求解,代码简洁,这个思路挺难想的。
首先用一些比较小的数据模拟一下,当n=6时,用笔操作不难发现是3次,具体如下:
1、2、3、4、5、6
从后面三个数字,也就是4、5、6开始操作,同时减min{4,5,6},剩下:
1、2、3、0、1、2       也就是说fun(6)=fun(6/2)+1
不难发现,继续操作前三个数1、2、3也可以同时操作最后的1、2,所以把这五个数操作完,就是两次:
第一次:1、0、1、0、1、0
第二次:0、0、0、0、0、0
总的来说就是3次。
 
一般的,为了平衡,保留1~n/2,把剩下的数同时减去n/2+1,得到序列1、2、3、…、n/2、0、1、…、(n-1)/2,等价于1、2、3、…、n/2,所以fun(n)=fun(n/2)+1,初始化fun(1)=1。
 
代码1如下:
 #include <stdio.h>
int fun(int n)
{
return n==?:fun(n/)+;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return ;
}

代码2如下:

 #include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=;
for(;n>;n/=)
ans++;
printf("%d\n",ans);
}
return ;
}

正整数序列 Help the needed for Dexter ,UVa 11384的更多相关文章

  1. Help is needed for Dexter UVA - 11384(二分)

    本来抱着wa一发的心态写写,没想到过了. 算是一种二分吧. 也就是说,减数取太大和太小都不好,怎样是最好的呢?当然是,每次减去一个数之后新形成的序列和前面的序一样是最好的 这样的话,本来想写个二分,但 ...

  2. 【巧妙算法系列】【UVA 11384】 Help is needed for Dexter 正整数序列

    Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee ...

  3. UVA 11384 Help is needed for Dexter(问题转化 递归)

    Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee ...

  4. UVA.11384 Help is needed for Dexter (思维题)

    UVA.11384 Help is needed for Dexter (思维题) 题意分析 同样水题一道,这回思路对了. 给出数字n,面对一个1,2,3,4--n的数字序列,你可以对他们的部分或者全 ...

  5. uva------Help is needed for Dexter(11384)

    Problem H Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided t ...

  6. 算法 - 求和为n的连续正整数序列(C++)

    //************************************************************************************************** ...

  7. 洛谷——P3152 正整数序列

    P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好 ...

  8. 编程算法 - 和为s的连续正整数序列 代码(C)

    和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出全部和为s的连续正数序列(至少含有两个数). 起 ...

  9. 洛谷 P3152 正整数序列

    P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好 ...

随机推荐

  1. fingerprint for the ECDSA key

    验证  fingerprint for the ECDSA key ssh-keygen -t  ecdsa  -f ssh_host_ecdsa_key 在B上ssh A ,得到A的fingerpr ...

  2. win10: windows+E 改回打开我的电脑

    之前习惯使用windows+E来打开我的电脑,用了win10之后按windows+E打开的却是“快速访问”文件夹,很不习惯,可用下列办法改回: 1.打开“查看”选项卡,选择”选项“按钮. 2.在“常规 ...

  3. Java开发手册-编程规约精选

    # Java开发手册-编程规约精选 ## 总约 - 采用驼峰写法 ## 变量 - 首字母小写 ## 方法 - 方法名首字母小写- 参数首字母小写 ## 引用 - <阿里巴巴Java开发手册> ...

  4. 微信jaapi签名

    public WeiXinJsSignature(string weixinUrl) { //string url = ConfigurationManager.AppSettings["U ...

  5. java中 try catch的妙用

    程序开发中,格式转换的时候,经常由于字符串可能是其他的不可预知的符号导致,字符串转数值失败, 这个时候可以妙用try catch来解决,如下图所示.其实,很多其他不可预知的异常情况,也可以用它来处理. ...

  6. Windows下MariaDB数据库安装图文教程

    MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数据库可以迁移到MariaDB中使用   说明: MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQ ...

  7. phpexcel 导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法

    使用过很多次phpexcel了,有时需要保存文件到磁盘,有时需要浏览器弹出下载.保存到磁盘一半不会出现问题,关键是浏览器弹出保存,经常会发生导出的excel文件无法打开,提示文件格式或文件名无效,文件 ...

  8. Ideal设置编码格式

    file-------settings-------file Encodings

  9. 石子合并 区间DP模板题

    题目链接:https://vjudge.net/problem/51Nod-1021 题意 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石 ...

  10. UML学习笔记:类图

    UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...