最近发现一个组织的很不错的练习赛事–晴问新手杯,网址:
晴问算法 (sunnywhy.com)
A. 范围内和值
-
C++
#include <cstdio> int main() { int N; scanf("%d",&N); if(N > 200 || N == 1) printf("No"); else printf("Yes"); }
- 一开始漏了1 的那种情况
-
python
N = int(input()) if N > 200 or N == 1: print("No") else: print("Yes")
B. 最简计算器
学习答案的写法
-
解法1:scanf
由于两个整数均可能不止一位数,所以可以通过
scanf
的形式先后以
%d
的格式输入第一个整数、以
%c
的格式输入操作符、以
%d
的格式输入第二个整数,接下来判断输入的操作符是
+
还是
-
,分别进行相应的计算即可。标程:
#include <cstdio> int main() { int a, b; char c; scanf("%d%c%d", &a, &c, &b); if (c == '+') { printf("%d", a + b); } else { printf("%d", a - b); } return 0; }
-
解法2:stringstream
可以用字符串流 stringstream 将字符串转化为整数,然后根据运算符计算表达式的值。
具体实现步骤如下:
使用 stringstream 将字符串 A 和 B 转化为整数 a 和 b。 根据运算符号 ?,计算表达式的值。 如果 ? 是加号,则表达式的值为 a+b; 如果 ? 是减号,则表达式的值为 a−b; 输出表达式的值。
标程:
#include <iostream> // 包含输入输出流头文件 #include <sstream> // 包含字符串流头文件,用于将字符串转化为整数 using namespace std; int main() { string s; // 定义字符串变量 s,用于存储输入的字符串 cin >> s; // 从标准输入流中读取字符串 s stringstream ss(s); // 定义字符串流 ss,将字符串 s 转化为字符串流 int a, b; // 定义两个整数变量 a 和 b,用于存储从字符串流中读取的整数 char op; // 定义字符变量 op,用于存储运算符 ss >> a >> op >> b; // 从字符串流中依次读取整数 a、运算符 op 和整数 b int result; // 定义整型变量 result,用于存储表达式的结果 if (op == '+') { // 如果运算符为加号 result = a + b; // 计算 a + b 的结果 } else { // 如果运算符为减号 result = a - b; // 计算 a - b 的结果 } cout << result << endl; // 输出表达式的结果 return 0; // 程序正常结束 }
-
chatgpt给的写法
#include <iostream> using namespace std; int main() { string str; cin >> str; int pos = str.find("+"); // 查找加号的位置 if (pos == -1) { pos = str.find("-"); // 如果找不到加号,再查找减号的位置 cout << stoi(str.substr(0, pos)) - stoi(str.substr(pos + 1)); } else { cout << stoi(str.substr(0, pos)) + stoi(str.substr(pos + 1)); } return 0; }
stoi
函数将字符串转换为整数这里用到了 **
string
**类的 **
find()
函数和
substr()
函数。
find()
函数用于查找字符串中是否包含某个子字符串,如果找到了返回该子字符串的位置,否则返回 -1。
substr()
**函数用于截取字符串的一部分,第一个参数指定起始位置,第二个参数指定子串的长度(可选)。 -
python写法
str = input() if '+' in str: a, b = str.split('+') print(int(a)+int(b)) else: a, b = str.split('-') print(int(a)-int(b))