2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1

举报
福大大架构师每日一题 发表于 2025/01/13 09:36:51 2025/01/13
【摘要】 2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1 的孩子排成一队。最开始,编号为 0 的孩子手中有一个球,并向右传递。每秒,持球的孩子会将球传给旁边的孩子。当球到达队列的任一端(即编号为 0 或 n - 1 的孩子)时,传球方向会反转。请返回 k 秒后接到球的孩子的编号。提示:2 <= n <= 50。1 <= k...

2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1 的孩子排成一队。

最开始,编号为 0 的孩子手中有一个球,并向右传递。

每秒,持球的孩子会将球传给旁边的孩子。

当球到达队列的任一端(即编号为 0 或 n - 1 的孩子)时,传球方向会反转。

请返回 k 秒后接到球的孩子的编号。

提示:

2 <= n <= 50。

1 <= k <= 50。

输入:n = 3, k = 5。

输出:1。

解释:

经过的时间 孩子队列;

0 [0, 1, 2];

1 [0, 1, 2];

2 [0, 1, 2];

3 [0, 1, 2];

4 [0, 1, 2];

5 [0, 1, 2]。

答案2025-01-13:

chatgpt

题目来自leetcode3178。

大体步骤如下:

1.初始化孩子队列,编号为0到n-1。

2.设立一个变量t,用来记录球传递的位置。

3.计算每秒传递一次球后的位置:

  • 计算当前传球的位置t,取余数操作k % (n - 1)

  • 如果经过k/(n-1)轮传球之后发现传球方向需反转,条件是(k/(n-1)) % 2 > 0,那么返回队列的倒数第二个位置n - t - 1,因为最后一个位置是编号为n-1的孩子,其实到该孩子手中的时候,传球方向会反转。

  • 否则,返回位置t即可。

4.执行main函数,给定初始条件n=3,k=5,调用numberOfChild函数计算得到结果。

5.输出结果。

总的时间复杂度为O(1),因为无论n和k的取值如何,算法的执行时间不会随着n和k的增加而增加。

总的额外空间复杂度为O(1),因为除了几个变量外,没有使用额外的数据结构存储数据。

Go完整代码如下:

package main

import (
	"fmt"
)

func numberOfChild(n, k int) int {
	t := k % (n - 1)
	if k/(n-1)%2 > 0 {
		return n - t - 1
	}
	return t
}

func main() {
	n := 3
	k := 5
	result := numberOfChild(n, k)
	fmt.Println(result)
}

在这里插入图片描述

Rust完整代码如下:

fn number_of_child(n: i32, k: i32) -> i32 {
    let t = k % (n - 1);
    if k / (n - 1) % 2 > 0 {
        return n - t - 1;
    }
    t
}

fn main() {
    let n = 3;
    let k = 5;
    let result = number_of_child(n, k);
    println!("{}", result);
}

在这里插入图片描述

C完整代码如下:

#include <stdio.h>

int numberOfChild(int n, int k) {
    int t = k % (n - 1);
    if (k / (n - 1) % 2 > 0) {
        return n - t - 1;
    }
    return t;
}

int main() {
    int n = 3;
    int k = 5;
    int result = numberOfChild(n, k);
    printf("%d\n", result);
    return 0;
}

在这里插入图片描述

C++完整代码如下:

#include <iostream>

int numberOfChild(int n, int k) {
    int t = k % (n - 1);
    if (k / (n - 1) % 2 > 0) {
        return n - t - 1;
    }
    return t;
}

int main() {
    int n = 3;
    int k = 5;
    int result = numberOfChild(n, k);
    std::cout << result << std::endl;
    return 0;
}

在这里插入图片描述

Python完整代码如下:

def number_of_child(n, k):
    t = k % (n - 1)
    if (k // (n - 1)) % 2 > 0:
        return n - t - 1
    return t

if __name__ == "__main__":
    n = 3
    k = 5
    result = number_of_child(n, k)
    print(result)

在这里插入图片描述

JavaScript完整代码如下:

function numberOfChild(n, k) {
    const t = k % (n - 1);
    if (Math.floor(k / (n - 1)) % 2 > 0) {
        return n - t - 1;
    }
    return t;
}

const n = 3;
const k = 5;
const result = numberOfChild(n, k);
console.log(result);

在这里插入图片描述

Java完整代码如下:

public class Main {
    public static int numberOfChild(int n, int k) {
        int t = k % (n - 1);
        if (k / (n - 1) % 2 > 0) {
            return n - t - 1;
        }
        return t;
    }

    public static void main(String[] args) {
        int n = 3;
        int k = 5;
        int result = numberOfChild(n, k);
        System.out.println(result);
    }
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。