2025_11_7_刷题

2025_11_7_刷题

文章目录

  • 2025_11_7_刷题
    • 一、前言
    • 二、刷题
      • [2.1 老式计算机](#2.1 老式计算机)
        • [2.1.1 分析题目](#2.1.1 分析题目)
        • [2.1.2 思维发散](#2.1.2 思维发散)
        • [2.1.3 思路整理](#2.1.3 思路整理)
        • [2.1.4 代码](#2.1.4 代码)
        • [2.1.5 总结](#2.1.5 总结)
      • [2.2 表达式求值](#2.2 表达式求值)
        • [2.2.1 分析题目](#2.2.1 分析题目)
        • [2.2.2 思维发散](#2.2.2 思维发散)
        • [2.2.3 思路整理](#2.2.3 思路整理)
        • [2.2.4 代码](#2.2.4 代码)
        • [2.2.5 总结](#2.2.5 总结)
      • [2.3 表达式求值](#2.3 表达式求值)
        • [2.3.1 分析题目](#2.3.1 分析题目)
        • [2.3.2 思维发散](#2.3.2 思维发散)
        • [2.3.3 思路整理](#2.3.3 思路整理)
        • [2.3.4 代码](#2.3.4 代码)
        • [2.3.5 总结](#2.3.5 总结)
      • [2.4 信息整理](#2.4 信息整理)
        • [2.4.1 分析题目](#2.4.1 分析题目)
        • [2.4.2 思维发散](#2.4.2 思维发散)
        • [2.4.3 思路整理](#2.4.3 思路整理)
        • [2.4.4 代码](#2.4.4 代码)
        • [2.4.5 总结](#2.4.5 总结)
    • 三、小结

一、前言

今天是刷题的第3天,今天是关于字符串的几道题目。

二、刷题

2.1 老式计算机


------计挑赛2021年C++组真题

老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是+、-或*,运算符优先级与C++一致),现给出A,B,C的数值以及@和#对应的运算符,请你编写程序,验证老式计算机的运行结果。

输入说明: 第一行是一个整数N(|N|≤10000),表示有N组计算数据需要处理,接下来N行,每行是相应的数据,包括三个整数和两个运算符,分别对应A、@、B、#和C。

输出说明: 对每行输入的数据,输出计算结果。

输入样例: 3

​ 1+2*3

​ 3*2-1

​ 5+7-9

输出样例: 7

​ 5

​ 3

2.1.1 分析题目

题意大致为该计算机有一个固定的计算模板,对于抛出的计算表达式,能够给出正确的答案。

  • 计算符号只有3种+ - *
  • 模板不是一般的固定------只有3个数字和2个符号
2.1.2 思维发散

本题的难点在于计算优先级的规定。

我一开始想的是用stoi直接将表达式计算出来,但是stoi是不能处理符号,只是转化为数字,直到不是数字就会自动终止。

2.1.3 思路整理
  • 自定义优先级
  • 定义一个计算函数,专门用来计算表达式
  • 循环输出答案
2.1.4 代码
cpp 复制代码
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int n;
int a, b, c;
char ch1, ch2;
int ans;
// 计算优先级
int prior(char c)
{
	if(c == '*')
		return 2;
	if(c == '+' || c == '-')
		return 1;
    return 0;
}
// 计算表达式
int calculate(int a, int b, char ch)
{
	switch(ch)
	{
		case '+': return a + b;
		case '-': return a - b;
		case '*': return a * b;
		default: return 0;
	}
}
int main()
{
	cin >> n;
	while(n--)
	{
		cin >> a >> ch1 >> b >> ch2 >> c;
		if(prior(ch1) < prior(ch2))
		{
			int temp = calculate(b, c, ch2);
			ans = calculate(a, temp, ch1);
		}
		else
		{
			int temp = calculate(a, b, ch1);
			ans = calculate(temp, c, ch2);
		}
		cout << ans << endl;
	}
	return 0;
}

结果

2.1.5 总结

本题的输入输出和我今天做的另一道很像,同样是固定了模板,输入都是一个一个字符输入,处理思路也很简单。我都想难了------以为要处理字符串。有时解题时也要仔细揣度出题者的用意是考什么。比如这题主要考察运算符的优先级

2.2 表达式求值


------计挑赛2021年C++组真题

老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是位运算符&、|、^,须考虑计算优先级),现给出A,B,C的数值以及@和#对应的运算符,请你编写程序,验证老式计算机的运行结果。

输入说明: 第一行是一个整数N(|N|≤10000),表示有N组计算数据需要处理,接下来N行,每行是相应的数据,包括三个整数和两个运算符,分别对应A、@、B、#和C。

输出说明: 对每行输入的数据,输出计算结果。

输入样例: 3

​ 1&2|3

​ 3|2^1

​ 5^7|9

输出样例: 3

​ 3

​ 11

2.2.1 分析题目

这个题和上一个题一样,不过考验的运算符升级了------& | ^

2.2.2 思维发散

感觉这个题考察不在算法,而是对于运算符的理解程度。

不过还真被他考着了,这个运算符我不咋熟悉------补一下~

总结如下

运算优先级:~ (按位取反) << >> (移位) & (按位与) ^ (按位异或) | (按位或)

符号释义:

  • &------按位与------全1为1,有0为0
  • ^------按位异或------相同为0,不同为1
  • |------按位或------有1为1,全0为0
2.2.3 思路整理

和上题思路一致

只是要把运算符的优先级函数改一下符号

2.2.4 代码
cpp 复制代码
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int n;
int a, b, c;
char ch1, ch2;
int ans;
// 计算优先级
int prior(char c)
{
	if(c == '&')
		return 3;
	if(c == '^')
		return 2;
	if(c == '|')
		return 1;
    return 0;
}
// 计算表达式
int calculate(int a, int b, char ch)
{
	switch(ch)
	{
		case '&': return a & b;
		case '^': return a ^ b;
		case '|': return a | b;
		default: return 0;
	}
}
int main()
{
	cin >> n;
	while(n--)
	{
		cin >> a >> ch1 >> b >> ch2 >> c;
		if(prior(ch1) < prior(ch2))
		{
			int temp = calculate(b, c, ch2);
			ans = calculate(a, temp, ch1);
		}
		else
		{
			int temp = calculate(a, b, ch1);
			ans = calculate(temp, c, ch2);
		}
		cout << ans << endl;
	}
	return 0;
}

结果

2.2.5 总结

这种运算符日常做题确实不咋用,好吧~将来要成为一个大佬,就是要什么都会

2.3 表达式求值


------计挑赛2021年C++组真题

老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是+、*、%,须考虑计算优先级),现给出A,B,C的数值以及@和#对应的运算符,请你编写程序,验证老式计算机的运行结果。

输入说明: 第一行是一个整数N(|N|≤10000),表示有N组计算数据需要处理,接下来N行,每行是相应的数据,包括三个整数和两个运算符,分别对应A、@、B、#和C。

输出说明: 对每行输入的数据,输出计算结果。

输入样例: 3

​ 1+2*3

​ 3%2+1

​ 5+7%9

输出样例: 7

​ 2

​ 12

2.3.1 分析题目

不用多说了------运算符改为了+ * %

2.3.2 思维发散

2.3.3 思路整理

CV

2.3.4 代码
cpp 复制代码
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int n;
int a, b, c;
char ch1, ch2;
int ans;
// 计算优先级
int prior(char c)
{
	if(c == '+')
		return 1;
	if(c == '*' || c == '%')
		return 2;
	return 0;
}
// 计算表达式
int calculate(int a, int b, char ch)
{
	switch(ch)
	{
		case '+': return a + b;
		case '%': return a % b;
		case '*': return a * b;
		default: return 0;
	}
}
int main()
{
	cin >> n;
	while(n--)
	{
		cin >> a >> ch1 >> b >> ch2 >> c;
		if(prior(ch1) < prior(ch2))
		{
			int temp = calculate(b, c, ch2);
			ans = calculate(a, temp, ch1);
		}
		else
		{
			int temp = calculate(a, b, ch1);
			ans = calculate(temp, c, ch2);
		}
		cout << ans << endl;
	}
	return 0;
}

结果

2.3.5 总结

2.4 信息整理


------计挑赛2021年C++组真题

某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。各计算机的返回信号映射为一个0-15的数,其中从左到右第0位为1表示键盘故障、第1位为1表示鼠标故障、第2位为1表示显示故障、第3位为1表示声音故障。 如7对应0111,表示鼠标、显示、声音同时故障。 先输入这N台计算机的状态,请统计键盘或者鼠标故障的计算机数量。

输入说明: 第一行是一个N(0<N≤1000),表示计算机的数量。接下来N行,每行是一个0-15的数字。

输出说明: 一个整数,表示机房里键盘或者鼠标故障的计算机数目。

输入样例: 5

​ 12

复制代码
	   0

​ 0

​ 2

​ 4

输出样例: 2

2.4.1 分析题目

题意为每个二进制位表示一种计算机的故障位置。输入是十进制数,要求统计从左向右第1位是1或者第2位为1的数字个数。

2.4.2 思维发散

这个和我的第二篇刷题中最后一道有相似之处,都涉及十进制转任意进制。

写过那道,这道相对来说属实是舒适区啦~

2.4.3 思路整理
  • 将输入的10进制转为2进制
  • 遍历2进制的前两位。看是否为1
  • 统计答案
2.4.4 代码
cpp 复制代码
#include<iostream>
using namespace std;
int n,count,num;
char s[4];
void o_to_b(int x, char b[])
{
	for(int i = 0; i < 4; i++)
	{
		b[i] = x % 2;
		x = x/2;
	}
}
int main()
{
	cin >> n;
	
	while(n--)
	{
		cin >> num;
		o_to_b(num, s);
		if(s[3] == 1 || s[2] == 1)
		{
			count++;
		}
	}
	cout << count << endl;
	return 0;
}

结果

2.4.5 总结

本题还好。

三、小结

今日份刷题挺有水分的哈~但好得是真题(同一套的),明天继续!

相关推荐
似水এ᭄往昔2 小时前
【C++】--stack和queue
开发语言·c++
仰望—星空2 小时前
MiniEngine学习笔记 : CommandListManager
c++·windows·笔记·学习·cg·direct3d
csbysj20202 小时前
R 绘图 - 散点图
开发语言
会跑的兔子3 小时前
Android 16 Kotlin协程 第一部分
android·开发语言·kotlin
来荔枝一大筐3 小时前
力扣 寻找两个正序数组的中位数
算法
Js_cold3 小时前
Verilog函数function
开发语言·fpga开发·verilog
我是苏苏3 小时前
C#基础:如何从现有类库复制一个新的类库,并且加入解决方案
开发语言·c#
算法与编程之美3 小时前
理解Java finalize函数
java·开发语言·jvm·算法
怕什么真理无穷3 小时前
C++面试4-线程同步
java·c++·面试