数字游戏:解题思路

题目:

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

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

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

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

输入格式

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

输出格式

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

样例输入

3 2 5
+ 4
- 8

样例输出

4

首先,打好框架:

#include 
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 
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;
}