首页 > 其他分享 >CSP历年复赛题-P1022 [NOIP2000 普及组] 计算器的改良

CSP历年复赛题-P1022 [NOIP2000 普及组] 计算器的改良

时间:2024-05-21 14:54:12浏览次数:16  
标签:未知数 系数 NOIP2000 int rx 整数 P1022 CSP lx

原题链接:https://www.luogu.com.cn/problem/P1022

题意解读:求解一元一次方程。

解题思路:

直接采用模拟法,对字符串进行解析

设x保存未知数字母

设lx保存"="左边的未知数系数,多个系数要累加

设l保存"="左边的整数,多个整数要累加

设rx保存"="右边的未知数系数,多个系数要累加

设r保存"="右边的整数,多个整数要累加

则一元二次方程表示为:lx * x + l = rx * x + r,移项可得x=(r - l) / (lx - rx)

剩下要解决的就是字符串的处理问题

从字符串提取整数,可以采用num = num * 10 + c - '0'的方法

用1或-1来表示符号正、负

注意:当r - l == 0时,结果为0.000,需要特殊处理,否则可能出现-0.000的情况。

具体逻辑参考代码。

100分代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    char c, x; //c:输入  x:未知数
    int sign = 1; //符号
    int num = 0; //数字

    //lx:左边的未知数系数,l:左边的整数,rx:右边的未知数系数,r:右边的整数
    int lx = 0, l = 0, rx = 0, r = 0; 
    while(cin >> c)
    {
        if(c >= '0' && c <= '9') num = 10 * num + c - '0';
        if(c >= 'a' && c <= 'z')
        {
            x = c; //保存未知数字母
            if(num == 0) num = 1; //未知数系数如果没有,则默认为1
            lx += sign * num; //未知数系统累加
            num = 0; //清0
        }
        if(c == '+' || c == '-')
        {
            l += sign * num; //先累加前面的整数
            sign = (c == '+') ? 1 : -1; //再更新符号
            num = 0; //清0
        }
        if(c == '=')
        {
             l += sign * num; //先累加前面的整数
             sign = 1;
             num = 0;
             break;
        }
    }
    while(cin >> c)
    {
        if(c >= '0' && c <= '9') num = 10 * num + c - '0';
        if(c >= 'a' && c <= 'z')
        {
            x = c; //保存未知数字母
            if(num == 0) num = 1; //未知数系数如果没有,则默认为1
            rx += sign * num; //未知数系统累加
            num = 0; //清0
        }
        if(c == '+' || c == '-')
        {
            r += sign * num; //先累加前面的整数
            sign = (c == '+') ? 1 : -1; //再更新符号
            num = 0; //清0
        }
    }
    r += sign * num; //累加最后的整数

    if(r - l == 0) printf("%c=0.000", x);
    else printf("%c=%.3lf", x, 1.0 * (r - l) / (lx - rx));

    return 0;
}

 

标签:未知数,系数,NOIP2000,int,rx,整数,P1022,CSP,lx
From: https://www.cnblogs.com/jcwy/p/18204039

相关文章

  • CSP历年复赛题-P1016 [NOIP1999 提高组] 旅行家的预算
    原题链接:https://www.luogu.com.cn/problem/P1016题意解读:用最少的加油费用到达另一个城市,中间有若干加油点,起点也可加油。解题思路:本题是一个贪心策略题:枚举每一个加油点i:1、初始加油点是起点2、汽车能跑的最大距离范围内,找到下一个更便宜的加油点的位置3、如果能找到更便......
  • CSP历年复赛题-P1015 [NOIP1999 普及组] 回文数
    原题链接:https://www.luogu.com.cn/problem/P1015题意解读:一个N进制数M,把M正序和M逆序相加,几次之后得到是数是回文数,如果超过30次还无法得到回文数,输出Impossible!。解题思路:M最长100位,因此需要高精度,定义数组vector<int>m来存储整数M注意:16进制中可能存在'a~f''A~F'等字母,需......
  • CSP历年复赛题-P1014 [NOIP1999 普及组] Cantor 表
    原题链接:https://www.luogu.com.cn/problem/P1014题意解读:根据z字形遍历,求第n个数。解题思路:根据题意,遍历顺序如下图所示观察得知,第i层的x/y的x+y=i+1,并且如果i是偶数,x从1开始枚举;如果i是奇数,x从i开始枚举100分代码:#include<bits/stdc++.h>usingnamespacestd;in......
  • CSP历年复赛题-P1008 [NOIP1998 普及组] 三连击
    原题链接:https://www.luogu.com.cn/problem/P1008题意解读:将 1,2,…,9共 9个数分成3组,分别组成3个三位数,且使这 3 个三位数构成 1:2:3的比例,枚举所有的组合即可。解题思路:设定三个数a、b、c枚举a,最小123,最大987b=a*2,c=a*3判断b、c是否是三位数,且a、b、c中所......
  • CSP历年复赛题-P1009 [NOIP1998 普及组] 阶乘之和
    原题链接:https://www.luogu.com.cn/problem/P1009题意解读:  利用高精度计算阶乘之和,需要用到高精度乘法(高精度乘低精度)、高精度加法。  首先,思考不利用高精度如何解题,直观方法就是遍历i从1到n,每次乘i得到i的阶乘,然后累加到结果,代码如下:#include<bits/stdc++.h>usingnam......
  • CSP历年复赛题-P1010 [NOIP1998 普及组] 幂次方
    原题链接:https://www.luogu.com.cn/problem/P1010题意解读:输出一个正整数的2的幂次方表示,需要用到二进制数学知识,将整数拆解成2的次幂之和,幂次方也要进行拆解,因此容易想到通过递归处理。解题思路:先看样例,给定整数137,要拆解成2的幂次方之和,先考虑i使得刚好137>=2^i时,i取7,因此2......
  • CSP历年复赛题-P1548 [NOIP1997 普及组] 棋盘问题
    原题链接:https://www.luogu.com.cn/problem/P2241题意解读:要在整个n*m区域计算正方形和长方形的个数,枚举法即可。解题思路:此题枚举的对象是矩形的高i和宽j,高的范围[1,n],宽的范围[1,m],然后计算在n*m区域内有多少个i*j,i==j即属于正方形,i!=j属于长方形。那么,问题就集中在了......
  • csp2023 游记
    2023.10.20(Day0)S1拿了\(68.5\)分,顺利晋级。但是J1只拿了\(60.5\),没了。S2就在自己的学校(而且甚至是我上信息技术课的教室),所以试机了和没试机没有任何区别qwq。在luogu上面打了一下a+b,回顾了一下编译就走了。2023.10.21(Day1)正序开题,发现T1好像是\(5\)个fo......
  • P10229 [COCI 2023/2024 #4] Knjige 题解
    P10229[COCI2023/2024#4]Knjige题解知识点前缀和、贪心、枚举。题意分析一个长度为\(n\)的单调不减的数列\(\{k_i\}\),从左到右遍历,用\(a\)或\(b\)的代价,换\(0\)或\(k_i\)的价值。问:在总代价超过\(t\)之前,能够达到的最大价值为多少?思路分析显然是一个......
  • P10224 [COCI 2023/2024 #3] Vrsar 题解
    P10224[COCI2023/2024#3]Vrsar题解知识点前缀和思想,贪心。题意分析我觉得题目挺清晰了……思路部分分没必要,OK?我不会告诉你我考场上打部分分打了30min,还只有8分。正解我们设一个方案\(S\)为\(\{x_1,x_2...x_n\}\),其中\(x_i\)表示第\(i\)个滑雪场的......