首页 > 其他分享 >P1022 [NOIP2000 普及组] 计算器的改良

P1022 [NOIP2000 普及组] 计算器的改良

时间:2024-09-10 19:48:33浏览次数:10  
标签:NOIP2000 pos long flag num P1022 计算器

P1022 [NOIP2000 普及组] 计算器的改良

题解


题目链接

P1022 [NOIP2000 普及组] 计算器的改良

题目大意

给定一个合法有解的一元一次方程,其中只包含整数系数以及 +, -, =, 求该方程的解。
如:

  • \(6a−5+1=2−2a\)
  • \(−5+y=2y+6\)

等。

大体思路

按正常解方程思路来模拟,可以将原方程化简成 \(ax=b\) 的形式,则可得方程解 \(x=b/a\) 。
模拟过程中按各个数字是未知数前的系数 \(a\) 还是常数项 \(b\) 统计即可。

时间复杂度与空间复杂度分析

很显然,线性的模拟,时间与空间复杂度均为 \(O(n)\)

完整代码

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    s += '=';  //在字符串末尾加上'=', 相当于结束符号, 避免特判

    long long a = 0, b = 0;  //a: 未知数前的系数, b: 常数项
    char x;
    long long num = 0, flag = 0, pos = 1;  //flag: 当前数字项是否是负数, pos: 1表示在等号左边,-1表示在等号右边
                                           //这里相当于将未知数的系数全部移项至等号左边,常数项全部移项至等号右边
    for (int i = 0; i < s.size(); ++i) {
        if (!isdigit(s[i])) {
            if (flag) num *= -1;

            if (isalpha(s[i])) {
                x = s[i];
                a += pos * (num ? num : 1);
            }
            else b -= pos * num;

            num = flag = 0;
            if (s[i] == '-') flag = 1;
            if (s[i] == '=') pos = -1;  //遇到等号,说明要到等号右边了,将pos改为-1
        }
        else num = num * 10 + s[i] - '0';
    }
    printf("%c=%.3f\n", x, 1.0 * b / a);

    return 0;
}

AC提交记录

(https://www.luogu.com.cn/record/176528736)
image
平均 \(3\) ~ \(4ms\),没什么问题

标签:NOIP2000,pos,long,flag,num,P1022,计算器
From: https://www.cnblogs.com/medicos/p/18407036

相关文章

  • Python教程(二十一) : 从零开始制作计算器应用【PyQt6】
    文章目录专栏列表环境准备代码解析主要组件初始化界面布局设置事件处理计算逻辑运行应用完整代码示例截图总结注意专栏列表Python教程(十):面向对象编程(OOP)Python教程(十一):单元测试与异常捕获Python教程(十二):面向对象高级编程详解Python教程(十三):常用内置模块详解Python......
  • 用 React 构建一个简单的计算器:前端开发实战演练
    在前端开发中,React是一个非常流行的JaScript框架,广泛用于构建用户界面。今天我们将通过一个实战项目,展示如何用React构建一个简单的计算器,这不仅可以帮助你巩固对React的基础知识,还能让你对实际开发有更深的理解。一、项目搭建你需要确保本地环境已经安装了Node.js和n......
  • 软件测试学习笔记丨Pytest+Allure测试计算器
    本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31954项目要求3.1项目简介计算器是近代人发明的可以进行数字运算的机器。计算器通过对加法、减法、乘法、除法等功能的运算,将正确的结果展示在屏幕上。可帮助人们更方便的实现数字运算。一般情况下计算器除显示计算结果......
  • dfs P1019 [NOIP2000 提高组] 单词接龙
    题目大意:单词接龙,找出最长的长度的单词。题解:由于数据量较小,单词可多次使用,使用后可回溯,考虑dfs。代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e3+10;intn,used[N],ans;stringa[N],start;voiddfs(stringword){......
  • 软件测试学习笔记丨Pytest+Allure测试计算器
    本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31954二、项目要求2.1项目简介计算器是一个经典的编程场景,可以获取两个数据的计算结果。2.1.1知识点Pytest测试框架基本用法2.1.2受众初级测试工程师2.1.3作业内容使用Pytest编写自动化测试用例对相加函数进行测试......
  • 7-15 房贷计算器
    7-15房贷计算器分数10全屏浏览切换布局作者 wdd单位 山东科技大学设计一款房贷计算器,按用户选择的贷款类型(商业贷款、公积金贷款、组合贷款)、贷款金额(万)、期限(年)、利率(%)可计算得出每月月供参考(元)、支付利息(元)、还款总额(元)这些信息。房贷计算公式:支付利息=还款总......
  • python计算器制作
    好了,本期我们来制作一个计算器,就像下面那个视频一样,方便快速,让我们来看看吧!视频让我们一起做一个吧引入模块我们需要先在cmd输入pipinstallPySimpleGUI,然后引入这个模块importPySimpleGUIassg2.初始化图形化界面定义界面布局:layout=[[sg.In(key="-I-",disabled=True,siz......
  • 每日一题:Leetcode-224 基本计算器
    力扣题目解题思路java代码力扣题目:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。示例1:输入:s="1+1"输出:2示例2:输入:s="2-1+2"输出:3示例3:输入:s......
  • (算法)基本计算器II————<栈—模拟>
    1.题⽬链接:227.基本计算器II2.题⽬描述:题⽬解析:⼀定要认真看题⽬的提⽰,从提⽰中我们可以看到这道题:•只有「加减乘除」四个运算;•没有括号;•并且每⼀个数都是⼤于等于0的;这样可以⼤⼤的「减少」我们需要处理的情况。 3.解法(栈):算法思路:由于表达式⾥⾯没......
  • 学会Python基础制作简单计算器(附源码)
    在Python中,我们可以使用tkinter库来制作一个具有图形用户界面的简单计算器。以下是一个完整的教程,包括设计思路、代码实现以及运行效果说明。设计思路在设计计算器程序时,我们需要考虑以下几个方面:界面设计:计算器需要一个简单的用户界面,用户可以通过该界面输入数字和运算符......