Hackerrank问题图画书。
Brie的绘画老师要求她的班级将他们的书打开到页码。 Brie可以从书的前面或书的后面开始翻页。她总是一次翻一页。当她打开书本时,第1页始终位于右侧:
当她翻到第1页时,会看到第2页和第3页。除最后一页外,每个页面 页面将始终双面打印。最后一页只能是 根据书的长度,在正面印刷。如果这本书是n 页长,她想翻到p页,最小页数是多少 她将翻页?她可以从开头或结尾开始 这本书。
给出n和p,查找并打印Brie必须翻动的最少页数 为了到达第p页。
功能描述
在下面的编辑器中完成pageCount函数。它应该返回 Brie必须翻动的最少页数。
pageCount具有以下参数:
- n:书中的页数
- p:要转到的页码
输入格式
第一行包含整数n,即书中的页数。 第二行包含一个整数p,这是Brie的老师希望她转到的页面。
约束
输出格式
打印一个整数,该数字表示Brie转到第p页所必需的最少页面数。
示例输入0
6
2
示例输出0
1
示例输入1
5
4
示例输出1
0
================================================ ====
答案 0 :(得分:1)
应该认识到2页构成一个单元,使用2除以整数。
您没有利用余数减去整数除法,其中12/7 == 1。
static int pagesTurnCount(int n, int p) {
n /= 2; // >>= 1
p /= 2;
return Math.min(p, n - p); // From front, from back
}
p
0 > 1 < 2 < 3 page pairs
- 1 2 3 4 5 6 - pages
从零开始的程序员应注意,最后一页索引用于双页 确实是“页面数” n除以2。
答案 1 :(得分:1)
每次翻页都会看到2页。因此,这意味着在最坏的情况下,教师需要n/2
转向才能从第一页转到最后一页。但是,由于她也被允许从书的结尾处转弯,因此她可以在n/4
翻转时做最坏的情况。
因此,如果她的页码是p <= n/2
,则需要翻页p/2
,否则-n/2 - p/2
步或仅min(p/2, (n/2) - (p/2))
:
uint32_t pageCount(uint32_t n, uint32_t p) {
return std::min(p / 2, (n/2) - (p/2));
}
编辑
由于需要 JAVA 中的解决方案,因此我将其添加到此处:
int pageCount(int n, int p) {
return Math.min(p / 2, (n/2) - (p/2));
}
答案 2 :(得分:0)
def pageCount(n, p):
if p==n or p==1:
c=0
elif n%2!=0 and p==n-1:
c=0
else:
if p%2==0:
if n%2==0:
c=min(p/2,(n-p)/2)
else:
c=min(p/2,(n-p-1)/2)
else:
if n%2==0:
c=min((p-1)/2,(n-p+1)/2)
else:
c=min((p-1)/2,(n-p)/2)
return int(c)
答案 3 :(得分:0)
这是我的解决方案
fun pageCount(n: Int, p: Int): Int {
val pages = IntArray(n) { it }
val pairs = mutableListOf<Pair<Int, Int>>()
for (i in 0..n - 1 step 2) {
val lastItem = if (pages[i] + 1 >= pages.size) 0 else 1
pairs.add(pages[i] to pages[i + lastItem])
}
var forwardTurns = 0
var backwardTurns = 0
pairs.apply {
this.forEach { pair ->
if (pair.first == p || pair.second == p) return@apply else forwardTurns++
}
}
for (i in pairs.size - 1 downTo 0) {
if (pairs[i].first == p || pairs[i].second == p) break else backwardTurns++
}
return Math.min(forwardTurns, backwardTurns)
}
答案 4 :(得分:-2)
public class BookProblem {
static int pageCount(int n, int p) {
n /= 2; // >>= 1
p /= 2;
return Math.min(p, n - p); // It's working fine
}
public static void main(String[] args) {
System.out.println("minimum count=="+pageCount(5,4));
}
}
我的测试用例已通过黑客评级,但是我需要一种更有效的方法来解决它。谁能提供解决的办法?