首页 > 编程语言 >算法学习记录(模拟枚举贪心题单):四舍五入(未AC)

算法学习记录(模拟枚举贪心题单):四舍五入(未AC)

时间:2023-05-26 13:11:58浏览次数:55  
标签:四舍五入 AC point int 位是 小数点 && 进位 题单

题目链接

https://ac.nowcoder.com/acm/contest/20960/1004

题目分析

注意当第i位为9是,此时进位就是0,但是0<5,所以就不能再用i+1进行判断了。
所以对于这种情况可以再添加一个其他变量。

未AC代码

// 主要解决问题,因为使用i+1去判断是否要进位的
// 逢9进位后就会变成0,那么第i+1位就会变成0,那么也就不满足进位条件
// 所以,需要一个记号去表示,进位。

#include <iostream>

using namespace std;

// 利用第i+1位判断第i位是否要进位
int n, t, flag, point;
string s;

int main()
{
    cin >> n >> t >> s;
    for (int i = 0; i < s.size(); ++ i)
    {
        if (s[i] == '.') { point = i; flag = true; }     // 只能选择小数点后面的数
        if (flag && s[i + 1] >= '5')                     // 如果第i+1位是≥5的
        {
            int j = i, tmp = false; 
            for (j = i; j >= 0 && t; -- j)
            {
                if (s[j] == '.') continue;                            // 如果第i位是小数点,过滤掉
                if (s[j + 1] == '.' && s[j + 2] < '5') break;    // 如果第i+1位是小数点,判断第i+2位
                
                // 能来到这,说明,s[i + 2]是≥5的
                if (s[j + 1] >= '5' || s[j + 1] == '.' || tmp)
                {
                    if (s[j] == '9') { s[j] = '0', tmp = true; -- t; }
                    else
                    {
                        s[j] ++, -- t;
                        if (s[j] >= '5' && t);
                        else break;
                    }
                }
            }
            // 输出分两种情况
            //    1. j的位置 > 小数点的位置
            //    2. j的位置 ≤ 小数点的位置
            if (j > point)
            {
                for (int k = 0; k <= j; ++ k)
                    cout << s[k];
            }
            else
            {
                if (tmp) cout << tmp;
                for (int k = 0; k < point; ++ k)
                    cout << s[k];
            }          
            return 0;
        }
    }
    
    cout << s;
    return 0;
}

标签:四舍五入,AC,point,int,位是,小数点,&&,进位,题单
From: https://www.cnblogs.com/ClockParadox43/p/17434449.html

相关文章

  • Hackathon 代码黑客马拉松采访复盘
    AIGCHackathon2023北京站我参加了选手采访提纲,这里我感觉有些点可以分享给大家。之前复盘的链接:下面是采访我的回答内容:1.请向大家简单介绍一下自己吧?子木,社区名称为程序员泥瓦匠,年龄三十岁,毕业于温州医科大学。有8年SaaS经验,曾在有赞和售后宝等SaaS公司工作。兴......
  • vue3 reactive响应式赋值页面不渲染问题
    问题描述://声明变量letdata=reactive([]);http().then(res=>{data=res.dataconsole.log(data)})//data数据更新,页面没有渲染,1、因数据结构而导致的未渲染解决方法:依旧是reactive,可以在外面包一层//声明letstate=reactive({data:[]})//赋值state......
  • spring中的beanFactory和FactoryBean的区别?
    beanFactory是容器的根接口是一个工厂,负责管理bean,创建bean。FactoryBean是一个工厂bean,用来创建一类比较复杂的对象。比如mybatis里的sqlsessionFactory。二者的联系:FactoryBean的实现类会向容器中注入自身以及getObject方法返回的对象。二者联系的点在于AbstractBeanFac......
  • 2万多条QQ签名论坛签名大全ACCESS\EXCEL数据库
    2万多条QQ签名论坛签名大全ACCESS数据库收录了感情,恋爱,哲理,诗词,个性等7类共20000余条的QQ签名或论坛签名,有些包含幽默搞笑也有些蕴含哲理。您可以从中选择自己喜欢的作为自己的签名。截图下方有显示“共有记录数”,截图包含了表的所有字段列。该数据提供ACCESS数据库文件(扩展名是......
  • Graphpad Prism9.5.1 科学绘图软件 下载安装教程(含Win/Mac)
    软件下载AutodeskFlame2024formac软件介绍AutodeskFlame破解版由是Autodesk公司(译作欧特克)开发的一款高端电影剪辑和特效制作系统。Flame是用于高速合成、高级图形和客户驱动的交互设计的终极视觉特效制作系统。AutodeskFlame提供出色的性能和荣获奥斯卡奖的工具。从......
  • mac m1 安装docker redis最新版本
    终端输入命令,等待下载成功dockerpullimagesredis:latest查看本地是否下载成功启动redis容器dockerrun-itd--nameredis-dev-p6379:6379redis--name:随便起个名字,比如redis-dev-p6379:6379:映射容器服务的6379端口到宿主机的6379端口。外部可以直接通过宿主......
  • 4万多条糗事百科网站数据ACCESS\EXCEL数据库
    这个ACCESS数据库采集的是糗事百科小清新网站的内容,而且内容大于400字的将不收集(内容太长的大多是裹脚布),我要的是浓缩的精华。如果你需要实时采集糗事百科的应用程序,也可以联系我获得。 本数据库是由MicrosoftAccess2000创建的MDB数据库文件,您需要使用MicrosoftAccess......
  • 使用MASA Stack+.Net 从零开始搭建IoT平台 第四章 4.3 使用规则引擎实现告警通知
    目录前言方案实施流程安装Node-RED配置一个告警处理流程编写代码测试总结前言数据的挑战:物联网的发展带来了海量的数据。这些数据来源多样,格式不一,处理起来十分复杂。同时,物联网中的设备数量庞大,需要设备间进行高效的协同和管理,这也对数据处理提出了更高的要求。如何从这些复......
  • 关于ServiceAccount以及在集群内访问K8S API
    写在开篇在之前的两篇文章中提到,有4种方式使用ConfigMap配置Pod中的容器,关于之前的两篇可参考:《一文了解K8S的ConfigMap》《下篇1:将ConfigMap中的键值对作为容器的环境变量》本篇的实战场景就以访问API的方式读取ConfigMap,也就是编写代码在Pod中运行,然后使用K8SA......
  • react 手写签名
    importReact,{useRef,useState}from'react';importSignatureCanvasfrom'react-signature-canvas';import'./index.less';functionSignature(){const[signatureDataUrl,setSignatureDataUrl]=useState(null);constsi......