列表

详情


NC200045. History of The Stars

描述

永夜终会有结束的时候,一轮满月再度浮现于夜空,安详地躺在苍穹之中,周身满溢着辉光,这样的夜晚,总是会令人有一种“今人不见古时月,今月曾经照古人”之感。Vanis不禁有些惆怅,遥望着天河之内流淌的,散发着点点微光的繁星,不觉陷入沉思。这样的无尽的星河总是承载着人无限的幻想,Vanis不是第一次对着星星陷入沉思,上一次他就像这样数着星星连成的三元环。

这一次Vanis想要让“天上的东西”与“地上的东西”对应起来,他把红色的钻石与蓝色的钻石放在桌子上,希望用钻石的集合为天上的星星编号,编号的方式是这样的:
1. Vanis首先找出天空中的n颗星星,作为之后要编号的星星。
2. Vanis会拿出相同数量的红、蓝钻石放于桌面之上,保证任意两块钻石形状不同
3. Vanis会从中拿取若干个(可以是0)蓝色钻石、若干个(可以是0)红色钻石构成一个集合,之后将它对应到n颗星星中的某一颗,这一动作被认为是编号,将这个集合称作这颗星星的编码

两个编码被认为是不同的,当且仅当这两个集合中至少存在一块钻石只在其中一个集合中而不在另外一个集合中。举个例子,假如蓝、红钻石各有三块,分别记作B1, B2, B3, R1, R2, R3,集合{B1, B2}与集合{R1, R2, R3}是不同的,集合{R1, R2}与集合{R2, R3}是不同的,而集合{B1, R1}和集合{R1, B1}是相同的,集合{B1}与集合{B1}是相同的。

Vanis想给每一颗星星不同的编号。

Vanis想知道他最少需要拿多少颗等量的红、蓝钻石能够完成对n颗星星的编号。

输入描述

第一行输入一个整数n,表示星星的数量。

数据规范:
* .

输出描述

输出一个整数,表示Vanis最少需要拿出多少颗等量的红、蓝钻石。

示例1

输入:

4

输出:

1

说明:

示例2

输入:

1

输出:

1

说明:

至少需要各拿1颗

示例3

输入:

5

输出:

2

示例4

输入:

18

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2019-12-07 15:22:53

#include<stdio.h>
int main()
{
	int a,sum=1,l=4;
	scanf("%d",&a);
    while(l<a)
    {
    	l*=4;
    	sum++;
	}
	printf("%d",sum);
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 376K, 提交时间: 2020-02-16 15:52:32

#include<stdio.h>
int main()
{
	int a,sum=1,l=4;
	scanf("%d",&a);
	while(l<a)
	{
		l*=4;
		sum++;
	}
	printf("%d",sum);
}

Python3(3.5.2) 解法, 执行用时: 33ms, 内存消耗: 3356K, 提交时间: 2020-08-03 12:45:06

n = int(input())

m=1
while(4**m<n):
    m+=1
print(m)

上一题