Java 如何解决画册下面的问题

Java 如何解决画册下面的问题,java,Java,哈克朗克问题绘图书 布里的绘画老师让全班同学把书打开一个页码。布里可以从书的正面或背面开始翻页。她总是一页一页地翻。当她打开书时,第一页总是在右边: 当她翻到第1页时,她看到了第2页和第3页。每一页,最后一页除外 页面将始终在两面打印。最后一页可能只有 根据书的长度,印在正面。如果这本书是n 页长,她想翻到p页,最小的页数是多少 她会翻多少页?她可以在比赛开始或结束时开始 这本书 给定n和p,找到并打印Brie必须翻页的最小页数 为了到达第p页 功能描述 在下面的编辑器中完成pageCount函

哈克朗克问题绘图书

布里的绘画老师让全班同学把书打开一个页码。布里可以从书的正面或背面开始翻页。她总是一页一页地翻。当她打开书时,第一页总是在右边:

当她翻到第1页时,她看到了第2页和第3页。每一页,最后一页除外 页面将始终在两面打印。最后一页可能只有 根据书的长度,印在正面。如果这本书是n 页长,她想翻到p页,最小的页数是多少 她会翻多少页?她可以在比赛开始或结束时开始 这本书

给定n和p,找到并打印Brie必须翻页的最小页数 为了到达第p页

功能描述

在下面的编辑器中完成pageCount函数。它应该会回来 Brie必须翻页的最小页数

pageCount具有以下参数:

n:书的页数 p:要转到的页码 输入格式

第一行包含一个整数n,即书中的页数。 第二行包含一个整数p,布里的老师希望她翻到的页面

约束条件

输出格式

打印一个整数,表示Brie必须翻过的最小页数,才能进入第p页

样本输入0

样本输出0

样本输入1

样本输出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。

每次翻页时,多看到两页。因此,这意味着在最坏的情况下,教师需要n/2圈才能从第一页转到最后一页。然而,由于她也被允许从书的末尾翻身,她可以在n/4个翻转中完成最坏的情况


所以,如果她的页码是p,这是我的解决方案

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)
}
5
4
0
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
uint32_t pageCount(uint32_t n, uint32_t p) {
    return std::min(p / 2, (n/2) - (p/2));
}
int pageCount(int n, int p) {
    return Math.min(p / 2, (n/2) - (p/2));
}
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)
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)
}