问题
海龟长寿(并且繁荣)。桑给巴尔岛上的海龟是 甚至不朽。此外,他们是无性的,每年他们都给予 最多生一个孩子。除此之外,他们什么都不做。他们 永远不要离开他们的热带天堂。
Zanzibar上的第一只乌龟Zanzi Bar还有一项活动:它 跟踪岛上的海龟数量。每个新年 它计算海龟的数量,并将总数写成一小部分 小册子。多年以后,这本小册子包含了不减少的内容 整数序列,从一个或多个开始。 (出现之后 从桑给巴尔美丽的海滩上的鸡蛋开始,Zanzi花了一些时间 独自创办一个家庭。)有一天,Zanzi意识到海龟的情况也可能如此 从国外来到桑给巴尔,乘船或飞机。现在它想知道如何 许多居民并非出生在桑给巴尔。不幸的是,它 只能从小册子中的序列中导出下限。 事实上,如果一年中海龟的数量超过两倍 与前一年相比,必须通过导入来充分解释差异。
桑给巴尔有100万只乌龟,岛上完全覆盖 与乌龟一起,繁殖和进口都停止了。请 帮助Zanzi!编写一个计算导入下限的程序 如上所述,给定序列的海龟。
输入
输入以包含整数T(1≤T≤13)的行开始 测试用例数量。然后针对每个测试用例:
一行包含一系列以空格分隔的正整数 (≤1000000),非减少,从一个或多个开始。对于 方便,单个空格和0附加到末尾 序列
输出
对于每个测试用例,输出一个包含单个整数的行: 未在桑给巴尔出生的海龟数量的下限。
See question and sample input and output here
我的方法
public Zanzibar() {
Scanner scan = new Scanner(System.in);
int iterations = scan.nextInt();
for (int i = 0; i < iterations; i++) {
int previous = -1;
int current = -1;
int lower = 0;
while (true) {
if (current != -1)
previous = current;
current = scan.nextInt();
if (current == 0)
break;
if (current > 2 * previous && previous != -1)
lower += current - previous;
}
System.out.println(lower);
}
}
我认为我理解错误的问题。我应该继续增加下限还是应该找到两年之间的最大差异?另外,我不理解输入1 100 0如何产生输出98(来自链接)。难道不是99?
答案 0 :(得分:2)
问题制定者希望我们理解这一点:
每个测试用例的初始1
表示岛上的初始人口总是1
因此对于像1 1 1 0
这样的输入,它意味着:
初始人口为1
。然后在第二年开始时,人口仍为1
。在第3年开始时,人口仍为1
。
至于您对输入的疑问:1 28 0
,这意味着:
在第二年开始时,人口为28
,而本来可以达到的最大值是2
,因为唯一的龟可以生出最多一只乌龟。所以,这意味着,至少(28-2) = 26
龟迁移!!!
希望它有所帮助...
编辑:这是算法:
对于每一行测试用例,请执行以下操作:
initial
设为1
,将migrated
设为0
开始阅读该行中的第二个数字,直到遇到0
:
current
号码大于2*initial
:migrated = migrated + (current - 2*initial)
initial
设为current
打印migrated
修改-2:强>
这是JAVA实现:
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int iterations = scan.nextInt();
int i = 0;
int len,x;
int j,initial;
long migrated;
int arr[] = new int[1000005];
while(i<iterations)
{
len = 0;
while(true)
{
x = scan.nextInt();
if(x==0)
break;
arr[len++] = x;
}
initial = arr[0];
migrated = 0;
j = 1;
while(j<len)
{
if(arr[j]-(2*initial)>0)
{
migrated += arr[j]-(2*initial);
}
initial = arr[j];
j++;
}
System.out.println(migrated);
i++;
}
}
}
<强>输入:强>
3
1 100 0
1 1 1 2 2 4 8 8 9 0
1 28 72 0
<强>输出:强>
98
0
42