当前位置:首页 » 《随便一记》 » 正文

数字游戏:解题思路_Peyriat的博客

29 人参与  2022年03月20日 15:07  分类 : 《随便一记》  评论

点击全文阅读


题目:

科小维拿到了一个不超过p的非负整数n,他对这个数进行了m次操作,每一次操作可能是以下3种之—:

+ k,表示对目前的数加上k 然后再对p取模

- k,表示对目前的数减去k然后再对p 取模,如果结果为负数,转换成同余的非负数

* k ,表示对目前的数乘上k然后再对p取模

输入格式

输入第一行,包含三个整数n , m , p(O≤n<p≤10^9,1≤m≤10 ^5)。接下来 m 行,每行是一个运算符和一个正整数k(1<k≤10^9),表示这—次的操作,两者之间以—个空格分隔。

输出格式

输出—行,包含一个整数,表示最后的结果。

样例输入

3 2 5
+ 4
- 8

样例输出

4

首先,打好框架:

#include <iostream>
using namespace std;
int main(){

    return 0;
}

输入n,m,p三个数字

int n,m,p;
cin >> n >> m >> p;

因为会执行m次操作,所以使用for循环,次数为m次

for(int i = 0;i < m;i++){

}

执行的内容分为两部分:符号和数字

所以设置两个变量,分别存符号和数字,然后输入

char c;
int s;
cin >> c >> s;

对输入的符号进行识别,然后执行相应操作

if(c == '+'){
    n += s;
}else if(c == '-'){
    n -= s;
}else if(c == '*'){
    n *= s;
}

然后待循环结束,因为 n 要对 p 取mod,却又不可为负数,所以进行转换

n = (n + p) % p;

假设 a ≡ b (mod x),那么 a + x ≡ b(mod x)

就是这个道理

在一切完成后,输出即可

cout << n << endl;

endl 为换行,可加可不加,题目没有要求,按照个人习惯来即可

总体代码

#include <iostream>
using namespace std;
int main(){
    int n,m,p;
    cin >> n >> m >> p;
    for(int i = 0;i < m;i++){
        char c;
        int s;
        cin >> c >> s;
        if(c == '+'){
            n += s;
        }else if(c == '-'){
            n -= s;
        }else if(c == '*'){
            n *= s;
        }
    }
    n = (n + p) % p;
    cout << n << endl;
    return 0;
}


点击全文阅读


本文链接:http://zhangshiyu.com/post/36406.html

输入  负数  操作  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1