当前位置: 首页 > article >正文

【Java版oj】day28反转部分单向链表、猴子分桃

目录

 一、反转部分单向链表

(1)原题再现

(2)问题分析

(3)完整代码

 二、猴子分桃

(1)原题再现

(2)问题分析

(3)完整代码


 一、反转部分单向链表

(1)原题再现

反转部分单向链表__牛客网

给定一个单链表,在链表中把第 L 个节点到第 R 个节点这一部分进行反转。

 

输入描述:

n 表示单链表的长度。

val 表示单链表各个节点的值。

L 表示翻转区间的左端点。

R 表示翻转区间的右端点。

 

输出描述:

在给定的函数中返回指定链表的头指针。

示例1

输入

5

1 2 3 4 5

1 3

输出

3 2 1 4 5

(2)问题分析

        这道题需要先定义一个结点类,里面包括结点存储的值和下一个指向,定义一个构造方法。因为这里输入输出全是自己写的,所以我先定义了一个数组,将输入的所有值放入数组中,先进行部分反转,然后再把每个值装入结点中,并连接起来。最后输出。

        ps:其实好像直接用数组输入输出也可以,不知道这道题到底考什么。

(3)完整代码

import java.util.Scanner;

/*
 * 反转部分单向链表
 */
class Node {
    int val;
    Node next;
    public Node(int val) {//构造方法
        super();
        this.val = val;
        this.next = null;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int len = sc.nextInt();
        int []value = new int[len];

        for (int i = 0; i < len; i++) {
            value[i] = sc.nextInt();
        }

        int left = sc.nextInt();
        int right = sc.nextInt();

        reverse( value, left-1, right-1);
        Node head = arrayToList(value);
        Node node;
        for (node = head; node.next != null; node = node.next) {
            System.out.print(node.val + " ");
        }
        System.out.print(node.val);
    }
    public static void reverse(int []value, int left, int right) {
        while (left < right) {
            int tmp = value[left];
            value[left] = value[right];
            value[right] = tmp;
            left++;
            right--;
        }
    }
    public static Node arrayToList(int []value) {
        Node head = new Node(-1);
        Node node = head;
        for (int i = 0; i < value.length; i++) {
            Node newNode = new Node(value[i]);
            node.next = newNode;
            node = newNode;
        }
        return head.next;
    }
}

 二、猴子分桃

(1)原题再现

猴子分桃__牛客网

        老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。
        第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。
        第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。
        后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。
        这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老猴子最少能得到几个桃子。

 

输入描述:

输入包括多组测试数据。

每组测试数据包括一个整数n(1≤n≤20)。

输入以0结束,该行不做处理。

 

输出描述:

每组测试数据对应一行输出。

包括两个整数a,b。 分别代表开始时最小需要的桃子数,和结束后老猴子最少能得到的桃子数。

示例1

输入

5

1

0

输出

3121 1025

1 1

(2)问题分析

                这道题是一道找规律。因为每次分5堆都会多出来1个,所以我们借4个桃子,这样每次都可以刚好分成5堆并且,每次给老猴子的桃子都不在我们借出的那4个中,这样最后减掉4就可以得到结果。假设最初由x个桃子,我们借给猴子4个,则此时有x+4个,第一个猴子得到\frac{\left ( x+4 \right )}{5},剩余\frac{4\left ( x+4 \right )}{5}个。第二个猴子分完后剩余\frac{4^{2}\left ( x+4 \right )}{5^{2}}个。第三个猴子分完后剩余\frac{4^{3}\left ( x+4 \right )}{5^{3}个。依次类推,最后一个猴子分完后剩余\frac{4^{n}\left ( x+4 \right )}{5^{n}。老猴子得到就是每次分到的1个+最后剩余的减去一开始借给他的四个得到n-4+\frac{4^{n}\left ( x+4 \right )}{5^{n}。要满足最后剩余的为整数,并且x最小,则当 x+4=5^{n}时,满足要求,老猴子最终得到n-4+4^{n}

(3)完整代码

import java.util.Scanner;

/*
 * 猴子分桃
 */

public class Main {//纯数学推导
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            if (n == 0) {
                return;
            }
            long a = (long)Math.pow(5, n);
            long b = (long)Math.pow(4, n);
            System.out.println((a - 4) + " " + (b - 4 + n));
        }
    }
}


 


http://www.kler.cn/a/7726.html

相关文章:

  • NodeJS 百度智能云文本转语音(实测)
  • Go开发指南- Goroutine
  • 力扣 LeetCode 541. 反转字符串II(Day4:字符串)
  • 检测敏感词功能
  • 探索 Python HTTP 的瑞士军刀:Requests 库
  • Python 中.title()函数和.lower()函数
  • nginx 逻辑判断if语句使用
  • 【二叉树OJ题(二)】前序遍历中序遍历后序遍历另一颗树的子树二叉树遍历平衡二叉树
  • 精彩回顾 | 平行云亮相LiveVideoStack2022北京站
  • 2023年一个完整的B2B订货网站源码
  • NC65 部门预算DAO类
  • ‘protoc-gen-js‘ 不是内部或外部命令,也不是可运行的程序
  • 在DongshanPI-D1开箱使用分享与折腾记录实现MPU6050数据读取
  • 面向对象编程(基础)8:关键字:package、import
  • 【面试】分库分表15道面试题
  • Python基础(二)
  • 第二章Python序列-列表
  • ROS实践06 自定义消息类型
  • Java基础(一)Java语言概述及入门
  • 【java】java中进制、byte、String转换问题
  • 经济法基础:第二章 会计法律制度
  • QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )
  • ftp创建虚拟用户【ftp精细化配置】
  • 编译技术-编译优化
  • 打破传统思维:关键词采集与市场调查的完美结合,引领你的行业领先
  • 优先级队列(java版)