蓝书 第一章 例题10 正整数序列

Posted 行码棋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝书 第一章 例题10 正整数序列相关的知识,希望对你有一定的参考价值。

题意:
给定正整数 n,用最少的操作把序列 1,2,,,n 全部变成 0;
操作是:每次可以从序列中选择一个或者多个,同时减去一个相同的数。

因为每次需要对若干个数进行减去相同的数的运算

比如说1,2,3,4,5五个数,我们第一次操作当然是对后面的三个数减去3,这样就变成了1,2,0,1,2,这屋个数就等价于1,2两个数。

需要明白每次减去中间的数的效果是最好的

1 2 3 4 减去3变成 1 2 0 1 等价于1 2
1,2,3,4,5减去3,变成了1,2,0,1,2等价于1 2

可以发现:

  • 最大的数以下的数都会出现,比如说最大的数为3,那么1,2都会出现
  • 对于最大数为x的操作数就为x/2的操作数加上 对x操作的次数(也就是1次)
#include<iostream>
using namespace std;

int f(int x)
{
	if(x==1) return 1;
	return f(x/2)+1;
}
int main()
{
	int n;
	while(cin>>n)
	cout<<f(n)<<'\\n';
	return 0;
 } 

以上是关于蓝书 第一章 例题10 正整数序列的主要内容,如果未能解决你的问题,请参考以下文章

蓝书 第一章 例题2 突击战

蓝书第一章 例题3 分金币

蓝书 第一章 例题1 勇者斗恶龙

蓝书 第一章 例题14 填充正方形

编程珠玑第一章中的代码

第一章 基本概念_因子和。给一个正整数n,请求n所有因子的累加和