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 总结

本题还好。

三、小结

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

相关推荐
杨连江1 分钟前
原子级平面限域协同晶核诱导定向生长单层鳞片石墨的研究
算法
广州山泉婚姻2 分钟前
C语言三种基本程序结构详解
c语言·开发语言
上弦月-编程6 分钟前
【C语言】函数栈帧的创建与销毁(底层原理)
c语言·开发语言
MATLAB代码顾问7 分钟前
混合粒子群-模拟退火算法(HPSO-SA)求解作业车间调度问题——附MATLAB代码
算法·matlab·模拟退火算法
eqwaak09 分钟前
PyTorch张量操作全攻略:从入门到精通
开发语言·人工智能·pytorch·python
辞旧 lekkk10 分钟前
【Qt】初识(上)
开发语言·数据库·qt·学习·萌新
Felven11 分钟前
C. Prefix Min and Suffix Max
算法
加农炮手Jinx12 分钟前
LeetCode 26. Remove Duplicates from Sorted Array 题解
算法·leetcode·力扣
加农炮手Jinx12 分钟前
LeetCode 88. Merge Sorted Array 题解
算法·leetcode·力扣
格林威12 分钟前
线阵工业相机:如何计算线阵相机的行频(Line Rate)?公式+实例
开发语言·人工智能·数码相机·算法·计算机视觉·工业相机·线阵相机