题目描述 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. 一个java创建,删除,构建Jenkins等功能的JenkinsUtil工具类

    package com.vip.webpagetest.utils; import java.io.InputStream;import java.util.ArrayList;import java ...

  2. ubuntu16.04和ubuntu18.04安装dlib

    - # for macOS brew install cmake brew install boost brew install boost-python --with-python3 # for U ...

  3. Java默认文件目录

    今天看到Ehcache中设置持久化的配置: <diskStore path="java.io.tmpdir" /> 好奇这个java.io.temdir是哪个目录,于是 ...

  4. SQLServer stuff函数

    STUFF ( character_expression , start , length ,character_expression ) 参数 character_expression 一个字符数据 ...

  5. Android 自定义View 四个构造函数详解

    https://blog.csdn.net/zhao123h/article/details/52210732 在开发android开发过程中,很多人都会遇到自定义view,一般都需要继承自View类 ...

  6. 009 轮播图,offset系列

    关于使用JS做轮播图,使用一个章节进行笔迹. 一:简单轮播图 1.程序 <!DOCTYPE html> <html lang="en"> <head& ...

  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点

    1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍 ...

  8. 在调用self对象时,本类调用用Win32Info().collect()

    import platform class Test: def test(self): func = getattr(self,'windows') func() @staticmethod def ...

  9. shell编程系列13--文本处理三剑客之sed利用sed追加文件内容

    shell编程系列13--文本处理三剑客之sed利用sed追加文件内容 追加用法总结: .a 在匹配行后面追加 .i 在匹配行前面追加 .r 将文件内容追加到匹配行后面 .w 将匹配行写入指定文件 追 ...

  10. Linux系统调优——网络(四)

    (1).查看网络(Network)运行状态相关工具 1)nload监控总体带宽使用情况 nload需要自己安装,而且在安装前需要安装epel-release [root@youxi1 ~]# yum ...