首页 > 其他分享 >测试题分析

测试题分析

时间:2023-06-11 11:11:09浏览次数:26  
标签:分析 10 string 测试题 int long st 字符串

目录

T1 计算表达式

题意
表达式的形式如:3+5 * 6 - 4
其中, 运算数为一位整数,运算符为 +、-、* 三种,且运算符没有优先级的区分,一律自左向右计算。
如上例的计算过程为:3+5 * 6-4=8 * 6-4=48-4=44

分析 模拟题,找到一种固定输入格式:a[+b] [+b] [+b] ...
对于后面的一个操作符和操作数,可以看做一个整体进行输入。
连续输入,cin以空格,制表符(\t),换行(\n) 作为分割,当读入 EOF=End Of File时结束。

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;

int main() {
    int a, c; char b; cin >> a;
    while (cin >> b >> c) {
        if (b == '+') a += c;
        if (b == '-') a -= c;
        if (b == '*') a *= c;
    }
    cout << a;
    return 0;
}

T2 查找子串并替换

题意
对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串),比如:
将“abcf abdabc”中的“abc”,替换为“AA”,则替换结果为“AAf abdAA”;
将“abcf abdabc”中的“abc”替换为“abcabc”,则替换结果为“abcabcf abdabcabc”。
本题查找子串时注意,大小写完全一致,才能作为子串,比如:在“Abcf abd Abc”中,如果找字符串“abc”是不存在的。
子串中可能包含空格,制表符等

分析 字符串模拟,利用string成员函数解决较为简单,这里复习一下string的常见函数;

int n=s.size();         获得字符串的长度
int n=s.length();       获得字符串的长度
int id=s.find("nos");   如果在字符串s中找到"nos",则返回第一次出现的位置;否则返回string::npos;
int id=s.find(a);       返回字母在 s[0...n]中的第一个位置(下标),如果没有,返回npos,在int下可以看做-1。
int id=s.find(a, i);    返回字母在 s[i...n]中的第一个位置(下标),如果没有,返回npos,在int下可以看做-1。
s.substr(i, n);         是获得字符串中下标从 i 开始的连续 n 个字符的一段子串
s.append(a);            在字符串s后追加字符串 a
s.append(n, c);         在字符串s后追加 n 个字符 c
s.insert(开始位置,字符串);     指定字符串插入到字符串中的指定位置,把字符串插入指定位置
s.erase(开始位置a,长度b);      删除字符串中从开始位置起,长度为b的字符串
s.replace(i, k, b);          替换 s 从下标 i开始连续 k个字符为 b
s.replace(1,3,"title");      将字符串s位置1开始,长度为3的字符串替换成字符串"title"的内容

to_string(b);                将数字 b 转为 string 类型
stoi(s), stod(s)             将字符串转为数字
sort(s.begin(),s.end());     排序(首地址,末地址的后一位);
reverse(s.begin(),s.end());  翻转(首地址,末地址的后一位);
点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;

int main() {
    string s, a, b;
    getline(cin, s), getline(cin, a), getline(cin, b);
    int i = s.find(a);
    while (i != -1) {
        s.replace(i, a.size(), b);
        i = s.find(a, i + b.size());
    }
    cout << s;
    return 0;
}

T3 AtoB

题意
给定一个 a 进制数 c,将它变成 b 进制并输出。

分析 很好的一个模拟题,学习加深对进制转换的理解和实现,需要注意的是当进制数大于10 时使用字母替代数字,另外需要注意的是数据范围。

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long LL;
const int N = 1e6 + 10;

string AtoB(string c, int a, int b) {
    LL t = 0;
    for (int i = 0; i < c.size(); i++) {
        if (c[i] <= '9') t = t * a + c[i] - '0';
        else t = t * a + c[i] - 'a' + 10;
    }
    string s;
    if (t == 0) s = "0";
    while (t) {
        LL r = t % b;
        if (r < 10) s.append(1, r + '0');
        else s.append(1, r - 10 + 'a');
        t /= b;
    }
    reverse(s.begin(), s.end());
    s = "(" + s + ")" + to_string(b);
    return s;
}
int main() {
    LL a, b; string c;
    cin >> c >> a >> b;
    cout << AtoB(c, a, b) << endl;
    return 0;
}

T4 回形取数

题意
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度(推导一下发现是逆时针)。一开始位于矩阵左上角,方向向下。

分析 直接模拟,按照下右上左的顺序一直取数,直到取到边界或者下一个数已经取过就切换方向。
有一个类似的题目,「NOIP2015」神奇的幻方,建议做一下

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 210;
int n, m, s[N][N], res[N * N];
bool st[N][N];

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) scanf("%d", &s[i][j]);

    int x = 1, y = 1, p = 0;
    res[++p] = s[x][y], st[x][y] = 1;

    while (p < n * m) {
        while (x + 1 <= n && !st[x + 1][y]) res[++p] = s[++x][y], st[x][y] = 1;
        while (y + 1 <= m && !st[x][y + 1]) res[++p] = s[x][++y], st[x][y] = 1;
        while (x - 1 >= 1 && !st[x - 1][y]) res[++p] = s[--x][y], st[x][y] = 1;
        while (y - 1 >= 1 && !st[x][y - 1]) res[++p] = s[x][--y], st[x][y] = 1;
    }
    for (int i = 1; i <= p; i++) printf("%d ", res[i]);
    return 0;
}

T5 算24点

题意
给出 n 个整数,请问这 n 个数字在不改变顺序且不加入括号的情况下,有多少种运算能得到 24(运算符号只使用三种:+-*)。
比如:4 10 2 4 8,有如下3种运算能够得到24。

4+10-2+4+8=24
4-10-2+4*8=24
4*10-2*4-8=24

分析 搜索,运算符只有3个,那么可以将所有的运算符组合先dfs打表,最后带入计算即可。

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 11, M = 3268800 + 10;
int n, a[N], cnt;
string s[M], op = "+-*";

// 生成一个长度 n-1 的op字符串
void dfs(string a) {
    if (a.size() == n - 1) {
        s[++cnt] = a; return;
    }
    for (int i = 0; i < 3; i++)
        dfs(a + op[i]);
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];

    dfs(""); int ans = 0;
    while (cnt--) {
        stack<int> st; st.push(a[1]);
        for (int i = 0, j = 2; i < n; i++, j++) {
            char op = s[cnt + 1][i];
            if (op == '+') st.push(a[j]);
            if (op == '-') st.push(-a[j]);
            if (op == '*') {
                int tt = st.top(); st.pop();
                st.push(tt * a[j]);
            }
        }
        int res = 0;
        while (st.size()) res += st.top(), st.pop();
        if (res == 24) ans++;
    }
    cout << ans;
    return 0;
}

标签:分析,10,string,测试题,int,long,st,字符串
From: https://www.cnblogs.com/hellohebin/p/17472656.html

相关文章

  • 《傅里叶分析》第五章笔记
    \(\mathbb{R}\)上的Fourier变换Fourier变换的基本理论实数域上函数的积分先前的章节已经给出了有界闭集上函数积分的定义,而\(\mathbb{R}\)上连续函数积分的自然延拓即\[\int_{-\infty}^{\infty}\]......
  • R语言上市公司经营绩效实证研究 ——因子分析、聚类分析、正态性检验、信度检验
    全文链接:http://tecdat.cn/?p=32747原文出处:拓端数据部落公众号随着我国经济的快速发展,上市公司的经营绩效成为了一个备受关注的话题。本文旨在探讨上市公司经营绩效的相关因素,并运用数据处理、图示、检验和分析等方法进行深入研究,帮助客户对我国45家上市公司的16项财务指标进行......
  • 对NBA球员巴特勒进行大数据分析
    (一)选题背景:NBA 作为世界上水平最高的篮球联赛,吸引了无数的球迷。每一场NBA 比赛都会产生大量的数据信息,如果能够有效地运用这些数据,便可以充分发挥出其潜在价值。在每年赛季开始之前,大量的媒体专家都会对本赛季NBA 常规赛的情况进行预测,这其中球队战绩和明星球员的个人数据是......
  • Python网络爬虫对汽车团购报名的爬取及分析
    一、选题背景 现如今汽车已逐步进入家庭中,对于一些准备购入新车的家庭,犹豫不决,不知道现在市场上与车友们推荐的哪些车,此次爬虫项目将对网上的团购排名进行爬取,更能简单直观的让大家依据个人情况来挑选自己中意的车辆详情。二、设计方案1.主题式网络爬虫名称  《python网络......
  • python爬虫——深圳市租房信息数据分析
    一、选题背景因为深圳经济非常不错,想必想要去深圳工作的人也不少。衣食住行是生活的基本需求。衣和食好解决,不喜欢的衣服可以买新的,不好吃的食物可以换一家吃。可是在住宿上,买房和租房的置换成本都相对较高,因此房源选择尤为慎重。作为目前买不起房的人自然是以租房为主,但是租房我......
  • 爬取B站热门视频并进行可视化分析
    (一)选题背景爬虫是从互联网上抓取对于我们有价值的信息。选择此题正是因为随着信息化的发展,大数据时代对信息的采需求和集量越来越大,相应的处理量也越来越大,正是因为如此,爬虫相应的岗位也开始增多,因此,学好这门课也是为将来就业打下扎实的基础。bilibili在当今众多视频网站中,有许......
  • 控制系统的时域分析
    一、概念1、控制系统的性能指标:分析控制系统时,评价系统性能好坏的标准。包括动态性能和稳态性能。也就是说在系统的整个响应过程中,系统的动态性能主要是从开始到过渡过程结束的这段时间的性能,需要满足系统的动态品质要求;而系统的稳态性能从过渡过程结束后的响应中,系统的稳态......
  • 编译原理:词法分析实验
    实验二词法分析实验目的根据PL/0语言的文法规范,编写PL/0语言的词法分析程序。通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的法。掌......
  • 编译原理:语法分析
    实验三语法分析实验目的给出PL/0文法规范,要求编写PL/0语言的语法分析程序。通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。选择一种语法分析方法(递归子程序法、LL(1)分析法、算......
  • python数据分析—葡萄酒质量预测
    一:选题背景随着葡萄酒越来越受欢迎,人们对于如何评价和预测葡萄酒质量的需求也越来越高。红酒质量的预测是其中的一个热门话题。传统的红酒质量评价是由专业品酒师根据对葡萄酒的视觉、嗅觉、味觉等感官特征进行评估,然后得出质量评分。但这种评价方式非常耗时费力且昂贵,并且与个人......