算法|数字游戏(解题思路)

题目:
科小维拿到了一个不超过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; }



    推荐阅读