算法|数字游戏(解题思路)
题目:
科小维拿到了一个不超过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;
}
推荐阅读
- 游戏IP(立足于玩家情感的粉丝经济)
- 画解算法(1.|画解算法:1. 两数之和)
- Guava|Guava RateLimiter与限流算法
- 最喜6.8.9
- 人生游戏--是游戏,还是人生()
- 一个选择排序算法
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- SG平滑轨迹算法的原理和实现
- (小说)月流水几亿的火爆游戏养成记
- 游戏治愈了我无聊之症