P3152 正整数序列

题目描述

kkk制造了一个序列,这个序列里的数全是由正整数构成的。你别认为她的数列很神奇——其实就是1, 2, …, n而已。当然,n是给定的。kkk的同学lzn认为0是一个好数字(看上去很饱满有木有),所以他机智的趁kkk不在把这个序列全变成了0(其实只是准备窝)~

可是kkk突然回来了!于是lzn的计划破灭了。但是他并不甘心,就和kkk说:我可以每次从这个序列中选取一些数,然后一起减去一个相同的数(当然也是正整数)。然后经过有(wu)限(qiong)次这样的操作后,这个序列就可以全变成0。

kkk当然不信咯,于是lzn就求出了他最少要做几次这样的操作,才能使这个序列全部变成0。

输入输出格式

输入格式:

一个正整数n

输出格式:

最少操作次数

如果无解输出-1

输入输出样例

输入样例#1: 复制

2

输出样例#1: 复制

2

说明

1<=n<=10^9

2333

大水题啊,今晚上一遍就过了哈哈哈哈!

找规律找规律。

然后,发现

次数1,2,3,4,5的第一组对应的n,

分别是2^0,2^1,2^2,2^3,2^4.

so,规律出来了:

如果log2(n)是整数的话,那么答案就是log2(n)+1;

如果不是整数,那么答案就是log2(n)向上取整的那个数再+1.

2333我真的是太聪明了!

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;

long long n;

int main()
{
	scanf("%lld",&n);
	int x=log2(n);
	if(x-(int)x==0)
	{
		printf("%d",x+1);
		return 0;
	}
	else
	{
		printf("%d",ceil(x)+1);
		return 0;
	}
}

此题跟-1没啥关系。

原文地址:https://www.cnblogs.com/Mary-Sue/p/9029961.html

时间: 2024-11-13 10:25:16

P3152 正整数序列的相关文章

洛谷——P3152 正整数序列

P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好数字(看上去很饱满有木有),所以他机智的趁kkk不在把这个序列全变成了0(其实只是准备窝)~ 可是kkk突然回来了!于是lzn的计划破灭了.但是他并不甘心,就和kkk说:我可以每次从这个序列中选取一些数,然后一起减去一个相同的数(当然也是正整数).然后经过有(wu)限(qiong)次这样的操作后,这

luogu P3152 正整数序列

题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇--其实就是1, 2, -, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好数字(看上去很饱满有木有),所以他机智的趁kkk不在把这个序列全变成了0(其实只是准备窝)~ 可是kkk突然回来了!于是lzn的计划破灭了.但是他并不甘心,就和kkk说:我可以每次从这个序列中选取一些数,然后一起减去一个相同的数(当然也是正整数).然后经过有(wu)限(qiong)次这样的操作后,这个序列就可以全变成0.

和为S的连续正整数序列

package wangChaoPA实习工作练习.com.剑指offer;import java.util.ArrayList;/* * 解题思路:因为是连续的,所以利用大小数进行解答 如果从little到big的和等于sum * 保存little到big值到list中然后,little++,big++ 如果从little到big的和小于sum big++ * 如果从little到big的大等sum little++ */public class 和为S的连续正整数序列{    public A

26.打印所有和为S的连续正整数序列

http://zhedahht.blog.163.com/blog/static/25411174200732711051101 题目: 输入一个正数n,输出所有和为n连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. 分析: 这是网易的一道面试题.这道题和本面试题系列的第10题有些类似.我们用两个数small和big分别表示序列的最小值和最大值.首先把small初始化为1,big初始化为2.如果从small到big的序列的

一道笔试题-给定一个正整数序列,请尝试将它们重新排列使得排列的结果最大。

问题描述:给定一个正整数序列,请尝试将它们重新排列使得排列的结果最大,例如正整数序列为9,31,35,3,7则最大值为9735331. 思路分析:先将正整数序列转换为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可.根据题目的要求,两个数字m和n排成的数字mn和nm,如果mn<nm,那么我们应该输出nm,也就是m应该排在n的后面,也就是m<n.反之,如果nm<mn,m排在n的前面,n<m.如果mn==mn,m等于n. 比较函数的定义是本解决方案的关键.这道题其实就是希

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

和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出所有和为s的连续正数序列(至少含有两个数). 起始于1, 2, 相加, 如果相等则返回, 如果小于, 则前端递增右移, 如果大于, 则后端递增右移, 一直到后端移动到s的一半位置. 因为两个数, 小数为一半, 大数为一半加一, 则必然结束. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author:

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

//**************************************************************************************************** // // 求和为n的连续正整数序列 - C++ - by Chimomo // // 题目: 输入一个正整数n,输出所有和为n的连续正整数序列.例如:输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. // // Answer: Supp

找出一段连续的正整数序列中重复(或缺失)的那个数

有这样一个简单的问题:给定n-m+2(或n-m)个正整数组成的乱序序列,其元素是m到n(n>m>=1)中的互不相同的正整数,有且只有一个是重复(或缺失)的.如何找到那个数?(这里假定缺失的数不是n或m) 由Ivony提出的异或算法想到的. 1.由于[m,n]这段闭区间的异或算法暂时没有想到,所以就用[1,m-1]^[1,n]来间接得出[m,n]这段闭区间的异或. 2.求出待求数组的异或,将此结果再与上面[m,n]的异或结果再次异或,即可得到那唯一的一个重复数(或缺失的那个数) 1 using

UVa 11384 Help in needed for Dexter 正整数序列

序列太简单了,每次对于后面一半进行操作,使之变成前一半就行了. i个数需要操作的次数 f(i)=f(i/2)+1 代码如下: #include<cstdio> using namespace std; int f(int n){ return n==1?1:f(n/2)+1; } int main(){ int n; while(scanf("%d",&n)==1) printf("%d\n",f(n)); return 0; } 原文地址:ht