HDU1032——The 3n + 1 problem,HDU1033——Edge,HDU1034——Candy Sharing Game

news2024/9/23 21:29:29

目录

HDU1032——The 3n + 1 problem

题目描述

运行代码

代码思路

HDU1033——Edge

题目描述

运行代码

代码思路

HDU1034——Candy Sharing Game

题目描述

运行代码

代码思路

HDU1032——The 3n + 1 problem

题目描述

Problem - 1032

运行代码

#include <iostream>
using namespace std;
int main() {
    int i, j, t, k;
    while (cin >> i >> j) {
        int u = i;
        int o = j;
        int max = 0;
        if (i > j) {
            t = i;
            i = j;
            j = t;
        }
        for (k = i; k <= j; k++) {  // 从 i 到 j 寻找最大循环次数
            int p = k;
            int cn = 0;
            while (p != 1) {
                if (p % 2 != 0)
                    p = 3 * p + 1;
                else
                    p = p / 2;
                cn++;  // cn 记录每个数变成 1 所需要的最大循环次数
            }
            if (max < cn)
                max = cn;
        }
        cout << u << " " << o << " " << max + 1 << endl;
    }
    return 0;
}

代码思路

  1. 读取输入:代码从标准输入读取两个整数ij,这两个整数定义了我们感兴趣的一个范围。

  2. 交换输入:如果i大于j,则交换它们的位置,确保i总是小于或等于j,这样在后续的循环中我们可以从ij进行迭代。

  3. 初始化变量uo分别存储了最初的ij的值,以便在最后输出时使用;max变量被初始化为0,用于记录在指定范围内所有数的Collatz序列中,序列长度的最大值。

  4. 遍历范围内的每一个数:从ij,对于范围内的每一个数k,代码将计算其Collatz序列的长度。

  5. 计算Collatz序列长度:对于每个数k,初始化p等于k,并使用一个循环来生成Collatz序列,直到p变为1。在这个过程中,如果p是奇数,则更新p3 * p + 1;如果是偶数,则更新pp / 2。每次迭代,cn(循环计数)都会增加,用于记录生成序列所需的步数。

  6. 更新最大序列长度:每次计算完一个数的序列长度后,检查cn是否大于当前已知的最大序列长度max,如果是,则更新maxcn

  7. 输出结果:在处理完所有数后,输出最初输入的两个数uo,以及最长序列的长度max + 1(因为序列的初始步骤也算一步)。这里加1是因为循环从某个数开始,最终到达1,所以cn记录的是到达1之前的步数,因此最终结果要加1。

  8. 循环继续或结束:由于while循环的存在,程序会持续读取和处理输入,直到没有更多的输入为止(例如,当标准输入结束时)。

HDU1033——Edge

题目描述

Problem - 1033

运行代码

#include <iostream>
#include <string>
using namespace std;
const int L = 0, R = 1, U = 2, D = 3;  // 代表左右上下 4 方向
int dir_A[] = { U, D, R, L };  // 执行 A 右转操作时 4 个方向变为对应的 UDRL 方向
int dir_V[] = { D, U, L, R };  // 执行 V 左转操作时 4 个方向变为对应的 DULR 方向
int dx[] = { -10, 10, 0, 0 };  // 左右上下 4 方向对应的 X 坐标增量
int dy[] = { 0, 0, 10, -10 };  // y 增量

void Edge(const string& com) {
    cout << "300 420 moveto" << endl;
    cout << "310 420 lineto" << endl;
    int x = 310, y = 420;  // 初始的坐标
    int cur_dir = R;  // 初始的方向始终向右

    for (char c : com) {  // 遍历命令
        int new_dir;  // 新的方向
        if (c == 'A') {
            new_dir = dir_A[cur_dir];
            x += dx[new_dir];  // 新方向 X 增量
            y += dy[new_dir];  // 新方向 Y 增量
        }
        else {
            new_dir = dir_V[cur_dir];
            x += dx[new_dir];
            y += dy[new_dir];
        }
        cur_dir = new_dir;  // 更新当前方向
        cout << x << " " << y << " lineto" << endl;
    }
    cout << "stroke" << endl;
   cout << "showpage" << endl;
}

int main() {
    string com;
    while (cin >> com) {
        Edge(com);
    }
    return 0;
}

代码思路

HDU1034——Candy Sharing Game

题目描述

Problem - 1034

运行代码

#include <iostream>
#include <cstdio>
#define N 100

using namespace std;

int main() {
    int s[N], n, i, k, t, p;

    while (scanf_s("%d", &n) == 1 && n) {
        for (i = 0; i < n; i++)
            scanf_s("%d", s + i);

        for (k = 1; ; k++) {
            t = s[n - 1] / 2;  // 首先处理边界条件,存取最后一个人糖果数的一半

            for (i = 0; i < n; i++) {
                p = s[i] / 2;  // 存取当前糖果数的一半用来给右边的同学
                s[i] = s[i] / 2 + t;  // 自己减一半再加上左边同学给的一半
                t = p;  // 给完一个同学换下一个

                if (s[i] % 2 != 0)  // 当前处理完如果为奇数,收老师一个
                    s[i]++;
            }

            t = s[0];
            bool isSame = true;  // 增加一个标志变量来判断是否每个同学糖果数相同

            for (i = 1; i < n; i++) {
                if (s[0] != s[i]) {
                    isSame = false;
                    break;
                }
            }

            if (isSame) {
                break;
            }
        }

        printf("%d %d\n", k, t);  // 输出游戏次数和每个人最终的糖果数
    }

    return 0;
}

代码思路

  1. 读取输入:代码从标准输入读取一组整数,第一个整数n表示参与游戏的小朋友的数量,接着读取n个整数,表示每个小朋友初始拥有的糖果数。

  2. 初始化游戏状态:使用一个整型数组s存储每个小朋友的糖果数,数组s的大小由宏N决定,这里假设最多有100个小朋友参与游戏。

  3. 重新分配糖果:代码进入一个无限循环,开始重新分配糖果的过程。每一次循环代表游戏的一轮。

  4. 处理边界条件:在每轮开始时,处理边界条件,即最后一个小朋友糖果数的一半会被保留,用于在这一轮结束时给予第一个小朋友。

  5. 分配糖果的逻辑:对于每一个小朋友,他们将自己的糖果数分成两半,一半留给自身,另一半给予右边的小朋友。如果分配后糖果数为奇数,则额外获得一颗糖果,以确保糖果数为偶数。

  6. 检查游戏是否结束:每一轮结束后,检查所有小朋友的糖果数是否相同。为此,代码使用了一个布尔变量isSame来标记所有小朋友的糖果数是否一致。如果所有小朋友的糖果数相同,游戏结束,跳出循环。

  7. 输出结果:一旦游戏结束,输出游戏的轮数k和每个小朋友最终的糖果数t

  8. 循环处理多组数据:由于使用了while循环读取输入,代码可以连续处理多组数据,直到读取的n为0或输入结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H3CNE(路由基础、直连路由与静态路由)

目录 6.1 直连路由 6.2 静态路由理解性实验 6.2.1 配置直连路由 6.2.2 配置静态路由 6.3 路由表的参数与比较 6.3.1 优先级的比较 6.3.2 开销的比较 6.4 路由器中的等价路由、浮动路由、默认路由 6.4.1 等价路由 6.4.2 浮动路由 6.4.3 默认路由(缺省路由) 6.1 直连路…

Golang | Leetcode Golang题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }

宿舍生活新升级:智能指纹锁的便捷体验(嘉立创EDA设计)

宿舍生活新升级&#xff1a;智能指纹锁的便捷体验 引言 宿舍生活总是充满挑战和乐趣&#xff0c;但有时也会因为一些小事情而变得复杂。比如&#xff0c;忘记带钥匙或者需要频繁地给室友开门。随着科技的发展&#xff0c;智能设备逐渐走进我们的生活&#xff0c;为日常带来便…

iPhone能运行Windows了 iOS正在被逼加速开放

用iPhone来运行Windows 11&#xff1f;是的&#xff0c;两个八竿子打不着的设备和系统&#xff0c;居然还有融合的一天。虽然不管从哪个方向来看&#xff0c;这都是一个很奇葩的玩法&#xff0c;但是背后却代表着iOS生态的进一步松绑&#xff0c;iOSAndroid化似乎不再仅限于功能…

【iOS】进程与多线程

目录 前言进程和线程进程和线程的区别多线程的意义时间片概念 线程的生命周期线程池的运行策略自旋锁和互斥锁自旋锁互斥锁自旋锁和互斥锁区别原子属性 iOS多线程技术方案 前言 学习此文&#xff1a;iOS多线程 在平时的iOS开发中&#xff0c;多线程是我们常会遇到的&#xff0…

EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频

EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式 H5页面播放flv流视频 文章最后有源码地址 解决海康视频播放视频流&#xff0c;先转码后自定义页面播放flv视频流 先看效果&#xff0c;1&#xff0c;EasyMedia自带的页面&#xff0c;这个页面二次开发改动页面比较麻烦 …

WARNING: The Nouveau kernel driver is currently in use by your system. 处理方法

实践系统&#xff1a; 安装NVIDIA驱动时&#xff0c;提示&#xff1a; WARNING: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver&#xff0c;and must be disabled before proceeding.警告&#xff1…

【分布式锁】Redis实现分布式锁

在分布式系统中&#xff0c;当多个服务实例&#xff08;或节点&#xff09;需要访问或修改同一份共享资源时&#xff0c;就需要使用分布式锁来确保数据的一致性和防止并发问题。这种情况下&#xff0c;传统的Java并发控制机制如ReentrantLock或synchronized就无法满足需求&…

.NET开源、简单、实用的数据库文档生成工具

前言 今天大姚给大家分享一款.NET开源&#xff08;MIT License&#xff09;、免费、简单、实用的数据库文档&#xff08;字典&#xff09;生成工具&#xff0c;该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等多文档格式的导出&#xff1a;DBCHM。 支持的数据库 Sq…

Docker+consul容器服务的更新与发现

1、Consul概述 &#xff08;1&#xff09;什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点…

初学MySQl简单sql语句(1)

目录 SQL语句介绍&#xff1a; DDL创建数据库&#xff1a; char和varchar比较 数值类型 数据库存储引擎 数据库存储引擎——InnoDB 数据库存储引擎——MyISAM 数据库存储引擎-MyISAM 和InnoDB区别 修改和删除数据库表 数据库设计三大范式 一、什么是范式 二、约束作…

如何批量重命名文件名?批量快速自定义文件名称怎么操作?

如何批量重命名文件名&#xff1f;批量快速自定义文件名称怎么操作&#xff1f;在高效率的信息化时代&#xff0c;呆板的工作方式已经不能满足我们的时效性&#xff0c;很多场景都需要一个高效率的方法来提升我们的工作效率&#xff0c;来完成任务的进度&#xff01; 如果用手…

redis的持久化机制以及集群模式

1.redis的持久化机制 内存数据库具有高速读写的优势&#xff0c;但由于数据存储在内存中&#xff0c;一旦服务器停止或崩溃&#xff0c;所有数据将会丢失。持久化机制的引入旨在将内存中的数据持久化到磁盘上&#xff0c;从而在服务器重启后能够恢复数据&#xff0c;提供更好的…

Python异常处理机制、调试模式

一、Bug的由来 1、Bug的由来 世界上第一部万用计算机的进化版-马克2号(Mark II) 2、Debug 二、Bug的分类 和 不同异常类型的处理方式 1、粗心导致的语法错误 SyntaxError &#xff08;1&#xff09; # age input(请输入你的年龄) # if age > 18: # print(成年人..…

深入浅出mediasoup—通信框架

libuv 是一个跨平台的异步事件驱动库&#xff0c;用于构建高性能和可扩展的网络应用程序。mediasoup 基于 libuv 构建了包括管道、信号和 socket 在内的一整套通信框架&#xff0c;具有单线程、事件驱动和异步的典型特征&#xff0c;是构建高性能 WebRTC 流媒体服务器的重要基础…

华为AR6300S路由器开启SSH远程登录

登录华为路由器&#xff1a; 使用控制台线连接到路由器的控制台端口或者通过Telnet或Web界面远程登录到设备。进入系统视图&#xff1a; 输入system-view&#xff08;或者简写为sys&#xff09;命令进入系统视图模式&#xff0c;这是配置全局参数的地方。生成RSA密钥对&#x…

dockerfile部署wordpress

1.将容器直接提交成镜像 [rootlocalhost ~]# docker commit 8ecc7f6b9c12 nginx:1.1 sha256:9a2bb94ba6d8d952527df616febf3fbc8f842b3b9e28b7011b50c743cd7b233b [rootlocalhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx …

昇思25天学习打卡营第22天 | DCGAN生成漫画头像

昇思25天学习打卡营第22天 | DCGAN生成漫画头像 文章目录 昇思25天学习打卡营第22天 | DCGAN生成漫画头像DCGAN模型数据集数据下载和超参数创建数据集数据集可视化 搭建网络生成器判别器损失函数和优化器 模型训练总结打卡 DCGAN模型 深度卷积对抗生成网络&#xff08;Depp Co…

【区块链+绿色低碳】巴中市生态价值核算创新应用 | FISCO BCOS应用案例

生态产品总值&#xff08;GEP&#xff09;&#xff0c;指一定区域生态系统为人类福祉和经济社会可持续发展提供的产品与服务价值总和&#xff0c;包 括供给产品价值、调节服务价值和文化服务价值。当前&#xff0c;推动生态产品价值有效转化存在“难度量、难抵押、难交易、 难变…

nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000

nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000&#xff0c;截图如下&#xff1a; 解决方法 在管理员权限下打开 CMD&#xff08;命令行&#xff09;并运行&#xff1a; net stop winnatnet start winnat 执行完成后在此通过nodejs启动项目即可…