机试准备第13天

news2025/3/10 11:55:55

第一题是模拟出入栈游戏。

#include <stdio.h>
#include <stack>
#include <iostream>
using namespace std;
int main()
{
    string str;
    while(getline(cin, str)){
        stack<char> stk;
        int j = 0;//扫描出栈序列str
        for(char i = 'a';i<='z';i++){
            stk.push(i);//每次按顺序入栈一个
            while(!stk.empty()&&stk.top()==str[j]){
                j++;//发生匹配,向后扫描
                stk.pop();//弹出匹配元素
            }
        }
        if(stk.empty()) printf("yes\n");
        else printf("no\n");
    }

    return 0;
}

第二题是简单计算器,代码逻辑与表达式计算相同。

#include <stdio.h>
#include <string>
#include <stack>
#include <map>
using namespace std;
    int main() {
        char strArr[300] = { 0 };
        map<char, int> priority = {
            {'\n',0},
            {'+',1},{'-',1},
            {'*',2},{'/',2}
        };
        while (fgets(strArr,300,stdin) != NULL) {
            string str = strArr;
            if (str == "0\n") {
                break;
            }
            string numStr = "";
            stack<char> opStack;
            stack<double> numStack;
            for (int i = 0; ; ++i) {
                if (str[i] >= '0' && str[i] <= '9') {
                    numStr.push_back(str[i]);
                }
                else if (str[i] == ' ') {
                    if (numStr.size() > 0) { // 操作数读取完成
                        double num = stod(numStr);
                        numStr = "";
                        numStack.push(num);
                    }
                }
                else { // 运算符
                    if (str[i] == '\n' && numStr.size() > 0) { // 操作数读取完成
                        double num = stod(numStr);
                        numStr = "";
                        numStack.push(num);
                    }
    
                    while (!opStack.empty() &&
                        priority[str[i]] <= priority[opStack.top()]) {
                        double rhs = numStack.top();
                        numStack.pop();
                        double lhs = numStack.top();
                        numStack.pop();
                        char curOp = opStack.top();
                        opStack.pop();
    
                        if (curOp == '+') {
                            numStack.push(lhs + rhs);
                        }
                        else if (curOp == '-') {
                            numStack.push(lhs - rhs);
                        }
                        else if (curOp == '*') {
                            numStack.push(lhs * rhs);
                        }
                        else if (curOp == '/') {
                            numStack.push(lhs / rhs);
                        }
                    }
    
                    // 栈为空 或者 新op的优先级高于栈顶
                    if (str[i] == '\n') {
                        printf("%.2lf\n", numStack.top());
                        break;
                    }
                    else {
                        opStack.push(str[i]);
                    }
                }
            }
        }
        return 0;
    }

下面学习递归与分治。若一个问题可以通过分而治之的思想解决,那就会用到递归。在代码段调用函数时,PC会走到被调函数的入口,栈区会压入一个新的栈针,返回时PC会回到主调方,栈区会弹出栈顶。递归的设计要考虑递归出口。

第三题是跳台阶,显然,这是一个复杂到没法全盘考虑的问题,只能考虑逐渐降低复杂度。把一个大问题分解为相似的小问题,看看能不能解决小问题。知道分解为能够直接解决的最小问题。本题中f(n) = f(n-1)+f(n-2)。使用分治法的两个要素:1.大问题要变成相似的小问题 2.找到最小问题的解决方案。

#include <stdio.h>
using namespace std;
int f(int n){
    if(n == 1) return 1;
    else if(n == 2) return 2;
    else return f(n-1)+f(n-2);
}
int main(){
    int n;
    scanf("%d", &n);
    int result = f(n);
    printf("%d", result);
}

第四题是不连续的字串。

using namespace std;
#include <stdio.h>
int f(int n){
    if(n == 1) return 2;
    else if(n == 2) return 3;
    else return f(n-1)+f(n-2);
}

int main()
{
    int n;
    scanf("%d", &n);
    printf("%d", f(n));

    return 0;
}

第五题是斐波那契数列,最有自信的一集。

#include <stdio.h>
using namespace std;
int F(int n ){
    if(n == 0) return 0;
    else if(n == 1) return 1;
    else return F(n-1) +F(n-2);
}
int main(){
    int n;
    scanf("%d", &n);
    printf("%d", F(n));
}

第六题是骨牌。简单dp,dp[n] = dp[n-1]+dp[n-2]。

#include <stdio.h>
using namespace std;
int main(){
    int n;
    scanf("%d", &n);
    int dp[10010] = {0};
    dp[1] = 1;
    dp[2] = 2;
    if (n == 1) {printf("1");return 0;}
    else if(n == 2) {printf("2");return 0;}
    else {for(int i = 3;i<=n;i++){
        dp[i] = (dp[i-1]+dp[i-2])%999983;
    }
    printf("%d", dp[n]%999983);
    return 0;
    }
}

第七题是2的幂次方。这个是真看不懂,看了答案代码,首先得到n的二进制形式,找到对应二进制位不为0的位置,输出不为0的位置,然后将不为0的位置再次递归直到到递归边界。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
string Get2sexponet(int n){
    if(n == 0) return "0";
    vector<int> exp;
    for(int i = 15;i >= 0;i--){
        if((n & (1<<i))!=0){
            exp.push_back(i);
        }
        
    }
    // n = 2^(exp[0]) + 2^(exp[1]) + ....求出n的指数形式
    string res ="";
    for(int i = 0; i <exp.size();i++){
        //2(XXX)+
        if(i != 0){
            res+="+";
        }
        if(exp[i] == 1){
            res+="2";
        }
        else {
            res += "2(" + Get2sexponet(exp[i]) + ")";
        }
    }
    return res;
}
int main()
{
    int n;
    while(scanf("%d", &n)!=EOF){
        printf("%s\n",Get2sexponet(n).c_str());
    }

    return 0;
}

第八题是矩阵幂次,主要是熟悉矩阵的各位置元素如何得到。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 15;
int n,k;
int w[N][N];
void mul(int c[N][N], int a[N][N], int b[N][N]){
    static int tmp[N][N];
    memset(tmp, 0, sizeof tmp);
    for(int i = 0; i <n;i++){
        for(int j = 0; j<n;j++){
            for(int k = 0;k<n;k++){
                tmp[i][j] +=a[i][k]*b[k][j];
            }
        }
    }
    for(int i=0; i<n;i++){
        for(int j = 0; j<n;j++){
            c[i][j] = tmp[i][j];
        }
    }
}
int main(){
    scanf("%d%d", &n, &k);
    for(int i = 0; i <n;i++){
        for(int j = 0; j < n;j++){
            scanf("%d", &w[i][j]);
        }
    }
    int res[N][N] ={0};
    for(int i = 0; i< n;i++) res[i][i] = 1;
    for(int i = 0;i<k;i++){
        mul(res,res,w);
    }
    for(int i = 0; i<n;i++){
        for(int j = 0;j<n;j++){
            printf("%d ", res[i][j]);
        }
        printf("\n");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于OpenCV的车牌识别系统(源码+论文+部署教程)

运行环境 基于OpenCV的车牌识别系统运行环境如下&#xff1a; • Python: ≥ 3.5 • OpenCV: ≥ 4.0 • IDE工具&#xff1a;Visual Studio Code&#xff08;可自行选择&#xff09; • 技术栈&#xff1a;Python OpenCV Tkinte 主要功能 基于OpenCV的车牌识别系统主要…

MySQL:CRUD(增删查改)

目录 一、准备工作 二、Create 新增 1、语法 2、单行数据全列插入 3、单行数据指定列插入 4、多行数据指定列插入 5、多行数据全列插入 三、Retrieve 检索 1、语法 2、全列查询 3、指定列查询 4、查询字段为表达式 &#xff08;1&#xff09;常量表达式 &…

【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer

【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器—tinyEasyMuduoWebServer csdn项目&#xff1a; 原文链接&#xff1a;https://blog.csdn.net/weixin_45178775/article/details/122257814 github链接&#xff1a;https://github.com/wyewyewye/tinyEasyMuduo…

Python入门———条件、循环

目录 语句 顺序语句 条件语句 缩进和代码块 判断年份是否是闰年 空语句 pass 循环 while 循环 求5的阶乘&#xff1a; 求1&#xff01;2&#xff01;3&#xff01;4&#xff01;5&#xff01; for循环 打印1-10 打印2&#xff0c;4&#xff0c;6&#xff0c;8&#x…

InDraw6.2.3 | 甾体、核苷、黄酮类化合物实现简称命名

导语 当化学家对着屏幕输入"2-amino-1,9-dihydro-6H-purin-6-one"时&#xff0c;隔壁生物学家可能正在搜索"鸟嘌呤"&#xff1b;这种命名差异如同"火星文"与"地球语"的碰撞。现在&#xff0c;鹰谷InDraw 6.2.3版带着53种多环化合物的…

Linux中的TCP编程接口基本使用

TCP编程接口基本使用 本篇介绍 在UDP编程接口基本使用已经介绍过UDP编程相关的接口&#xff0c;本篇开始介绍TCP编程相关的接口。有了UDP编程的基础&#xff0c;理解TCP相关的接口会更加容易&#xff0c;下面将按照两个方向使用TCP编程接口&#xff1a; 基本使用TCP编程接口…

系统部署【信创名录】及其查询地址

一、信创类型 &#xff08;一&#xff09;服务器&#xff1a; 1.华为云 2.腾讯云 3.阿里云 &#xff08;二&#xff09;中央处理器&#xff08;CPU&#xff09;&#xff1a; 1.海思&#xff0c;鲲鹏920服务器 &#xff08;三&#xff09;中间件 1.人大金仓 &#xff0…

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一&#xff0c;那什么是AOP&#xff1f;AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实说白了&#xff0c;面向切面编程就是面向特定方法编程。AOP是一种思想&#xff0c;而在Spring框…

Unity DOTS从入门到精通之EntityCommandBufferSystem

文章目录 前言安装 DOTS 包ECBECB可以执行的指令示例&#xff1a; 前言 DOTS&#xff08;面向数据的技术堆栈&#xff09;是一套由 Unity 提供支持的技术&#xff0c;用于提供高性能游戏开发解决方案&#xff0c;特别适合需要处理大量数据的游戏&#xff0c;例如大型开放世界游…

MySQL 索引的数据结构(详细说明)

6. MySQL 索引的数据结构(详细说明) 文章目录 6. MySQL 索引的数据结构(详细说明)1. 为什么使用索引2. 索引及其优缺点2.1 索引概述 3. InnoDB中索引的推演3.1 索引之前的查找3.2 设计索引3.3 常见索引概念1. 聚簇索引2. 二级索引&#xff08;辅助索引、非聚簇索引&#xff09;…

初学者快速入门Python爬虫 (无废话版)

全篇大概 5000 字(含代码)&#xff0c;建议阅读时间 40min 一、Python爬虫简介 1.1 什么是网络爬虫&#xff1f; 定义&#xff1a; 网络爬虫&#xff08;Web Crawler&#xff09;是自动浏览互联网并采集数据的程序&#xff0c;就像电子蜘蛛在网页间"爬行"。 分类&…

【git】ssh配置提交 gitcode-ssh提交

【git】ssh配置提交 gitcode-ssh提交 之前一直用的是gitee和阿里云的仓库&#xff0c;前两天想在gitcode上面备份一下我的打洞代码和一些资料 就直接使用http克隆了下来 。 在提交的时候他一直会让我输入账号和密码&#xff0c;但是我之前根本没有设置过这个&#xff0c;根本没…

【二】JavaScript能力提升---this对象

目录 this的理解 this的原理 事件绑定中的this 行内绑定 动态绑定 window定时器中的this 相信小伙伴们看完这篇文章&#xff0c;对于this的对象可以有一个很大的提升&#xff01; this的理解 对于this指针&#xff0c;可以先记住以下两点&#xff1a; this永远指向一个…

<论文>MiniCPM:利用可扩展训练策略揭示小型语言模型的潜力

一、摘要 本文跟大家一起阅读的是清华大学的论文《MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies》 摘要&#xff1a; 对具有高达万亿参数的大型语言模型&#xff08;LLMs&#xff09;的兴趣日益增长&#xff0c;但同时也引发…

SpringCloud系列教程(十三):Sentinel流量控制

SpringCloud中的注册、发现、网关、服务调用都已经完成了&#xff0c;现在就剩下最后一部分&#xff0c;就是关于网络控制。SpringCloud Alibaba这一套中间件做的非常好&#xff0c;把平时常用的功能都集成进来了&#xff0c;而且非常简单高效。我们下一步就完成最后一块拼图Se…

ArcGIS操作:15 计算点的经纬度,并添加到属性表

注意&#xff1a;需要转化为地理坐标系 1、打开属性表&#xff0c;添加字段 2、计算字段&#xff08;以计算纬度为例 !Shape!.centroid.Y ) 3、效果

蓝桥杯历年真题题解

1.轨道炮&#xff08;数学模拟&#xff09; #include <iostream> #include <map> using namespace std; const int N1010; int x[N],y[N],v[N]; char d[N]; int main() {int n;int ans-100;cin>>n;for(int i1;i<n;i)cin>>x[i]>>y[i]>>v…

IP-地址

主机号&#xff08;Host ID&#xff09; IP地址简介&#xff1a;IP地址是每台接入互联网的设备所拥有的唯一标识符&#xff0c;类似于电话号码的分层结构&#xff0c;由网络号和主机号组成。为了便于记忆&#xff0c;32位二进制的IP地址通常以点分十进制表示。 网络号&#xf…

2025-03-08 学习记录--C/C++-PTA 习题10-1 判断满足条件的三位数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h> #include <math.h>int search( int n );int…

三星首款三折叠手机被曝外屏6.49英寸:折叠屏领域的新突破

在智能手机的发展历程中,折叠屏手机的出现无疑是一次具有里程碑意义的创新。它打破了传统手机屏幕尺寸的限制,为用户带来了更加多元和便捷的使用体验。而三星,作为手机行业的巨头,一直以来都在折叠屏技术领域积极探索和创新。近日,三星首款三折叠手机的诸多细节被曝光,其…