模拟笔试:卡码网2023年快手笔试真题

news2024/11/25 18:45:19

1.158同余方程

思路

纯数学的思路,想不出来的话很难做。

欧几里得算法视频讲解

代码

#include <iostream>
using namespace std;

// 扩展欧几里得:计算 ax + by = gcd(a, b) 的解
long long extended_gcd(long long a, long long b, long long &x, long long &y) {
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    long long x1, y1;
    long long gcd = extended_gcd(b, a % b, x1, y1);
    x = y1;
    y = x1 - (a / b) * y1;
    return gcd;
}

int main() {
    long long a, b;
    cin >> a >> b;

    long long x, y;
    long long gcd = extended_gcd(a, b, x, y);

    // 由于我们只需要模 b 的正整数解,所以我们要保证 x 是正数
    x = (x % b + b) % b;

    cout << x << endl;

    return 0;
}

2.159大整数乘法

思路

从低到高按位相乘进位累加。

具体实现

1.先对其进行输入,分配给s1和s2分别代表两个大数,长度分别为n1和n2

2.由简单的数学知识可得n1*n2的数相乘的范围在(n1+n2-1,n1+n2),所以生成一个n1+n2全为'0'的字符串来存放相乘后的结果。

3.遍历,从右到左进行遍历(在代码中为了统一,我使用的是从左到右遍历,i,j,k分别代表与对应的最右端的距离来实现从右到左)

注意事项:这个里面只遍历n1+n2-1位,最高位是不进行遍历的,而是最后根据进位来进行计算的。

4遍历的内部逻辑:i,j分别代表相应的位数,根据数学知识可以知道(百位 = 百位*个位 + 十位*十位 + 个位*百位),所以第k位的值我们可以从s1[i]和s2[j]相乘获取。在这个里面,0代表个位,1代表十位等。所以k  = i + j;

add表示进位,sum代表相应的累加和。得到乘法的结果之类,根据累加和得到对应的进位,然后sum只保留个位作为最后的当前位的值。

注意事项:要将'0'变成0才能参与相乘。先更新进位再更新累加和。

5.每次遍历前需要将sum = sum +add来获取当前位的累加值。同时将add = 0表示遍历前的进位为0,在遍历结束之后将sum = 0。

6.对最高位的处理,根据前面的进位来得到最高位,同时如果最高位最后的结果为0的话,要删除。

代码

#include<iostream>
#include<string>
using namespace std;
int main(){
    string s,s1,s2;
    getline(cin,s);
    int i = 0;
    int j = 0;
    int n = s.size();
    for(;i<n;i++){
        if(s[i] == ' '){
            s1 = s.substr(0,i);
            break;
        }
    }
    int n1 = i;//代表两个的长度
    int n2 = n-i-1;
    s2 = s.substr(i+1,n - i - 1);//获得对应的两个数
    //cout<<n1<<" "<<n2<<endl;
    string ret = string(n-1,'0');//最长的长度为这个,后序把0给消掉
    int add = 0;//代表的是进位
    int sum = 0;//代表的是累加和
    for(int k = 0;k<n-2;k++){//最高位是不参与计算的,直接算最后的进位即可
        sum = sum + add;//前面的进位
        add = 0;//此时计算的就是当前位的进位了
        for(i = 0;i<n1&&i<=k;i++){//满足两个情况1:长度在这个之内,2,位数要满足
            j = k - i;//代表s2对应的位数
            if(j>=n2){
                continue;
            }
            int multi = (s1[n1-1-i]-'0')*(s2[n2-1-j]-'0');
            //cout<<multi<<endl;
            sum = sum + multi;
            add += sum/10;
            sum = sum%10;
        }
        ret[n-2-k] = sum + '0';
        //cout<<n-2-k<<" "<<ret[n-2-k]<<endl;
        sum = 0;//所有进位结束之后对应的累加和变为下一位,累加和设置为0
    }
    //再将最高位设置为进位
    ret[0] = add + '0';//最高位为进位
    //cout<<ret<<endl;
    if(ret[0] == '0'){
        ret.erase(0,1);//删除最高位
    }
    cout<<ret;
    return 0;
}

3.160二维平面上的折线段

思路

计算当前值和需要到达的结点的距离分两种情况

1.距离大于s,此时更新位置并将此时的位置写入

2.距离小于s,此时更新位置和长度,同时指向的结点更新。

具体实现

len:代表的是还需要移动的距离。

diff:代表的是当前位置与结点的距离。

注意事项:需要使用#include<iomanip>来控制输出的精度。

代码

#include<iostream>
#include<vector>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
    int N;
    cin>>N;
    vector<vector<double>> mp(N,vector<double>(2,0));
    for(int i = 0;i<N;i++){
        cin>>mp[i][0]>>mp[i][1];
    }
    double s;
    cin>>s;
    double len = s;//代表剩余的长度
    vector<vector<double>> ret;
    ret.push_back(mp[0]);
    int i = 1;
    vector<double> cur = mp[0];
    double sz = 0;
    while(i<N){//代表在这个范围之内
        double diff = sqrt((mp[i][0]-cur[0])*(mp[i][0]-cur[0]) + (mp[i][1]-cur[1])*(mp[i][1]-cur[1]));
        //cout<<diff<<" "<<len<<endl;
        if(diff >= len){
            sz = len/diff;
            cur[0] = cur[0] + sz * (mp[i][0]-cur[0]);
            cur[1] = cur[1] + sz * (mp[i][1]-cur[1]);
            ret.push_back(cur);
            len = s;//此时长度重新回到了原来的长度
        }else{
            len = len - diff;//还需要操作的距离
            cur = mp[i];
            i++;
        }
    }
    int n= ret.size();
    std::cout << std::fixed << std::setprecision(5);
    for(int i = 0;i<n;i++){
        cout<<ret[i][0]<<", "<<ret[i][1]<<endl;
    }
    return 0;
}

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

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

相关文章

Java语言程序设计——篇十五(5)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…

【STM32嵌入式系统设计与开发拓展】——16_FreeRTOS操作系统

参考&#xff1a;链接: 正点原子 一、认识裸机和RTOS 裸机是无操作系统支持&#xff0c;程序直接运行在硬件上&#xff0c;开发者要自行处理硬件细节。早期单片机常采用&#xff0c;优点是性能和资源利用率高&#xff0c;缺点是开发难、可移植性差。RTOS 是实时操作系统&…

vscode导入的包裹代码名称没有颜色

问题描述:代码其他染色正常,但是例如import torchtorch没有颜色,虽然能够识别(ctrl左键能够点进去看到torch代码) 解决: 下载extention pylancefile->preferences->settings, 搜索Python: Language Server, 从default改成pylance

JAVA—IO流

存储数据的方案File和文件数据的操作IO流&#xff0c;学习字节流和字符流&#xff0c;了解框架和IO框架Commons IO 目录 1.File &#xff08;1&#xff09;创建对象 &#xff08;2&#xff09;常用方法 【1】判断类型&#xff0c;获取信息 【2】创建文件&#xff0c;删除…

LNMP学习

一、LNMP—web 1. 概述 LNMP/LAMP linux/windows/unix apache/nginx mysql/pgsql php/jsp 2. nginx部署及其平滑升级 实操 3. nginx七层负载均衡及算法 算法参考文档&#xff1a;https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/ 实操 4…

flv格式转换mp4怎么转换?5个软件帮助你自己快速进行格式转换

flv格式转换mp4怎么转换&#xff1f;5个软件让你从此快速转换格式不求别人 将FLV格式的视频转换为MP4格式可以通过使用以下五款软件来轻松实现。这些工具操作简便&#xff0c;能够快速高效地完成视频格式的转换&#xff0c;让你轻松应对各种视频格式需求。 口袋视频转换器 这…

网安新声 | 网易云音乐崩了:网络安全如何守护在线体验

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 8月19日&#xff0c;#网易云音乐崩…

“休闲化“趋势增强,IAA手游出海如何抓住增长机遇?

进入存量时代&#xff0c;全球手游市场正面临严峻的挑战。数据显示&#xff0c;2023年 App Store 和 Google Play 的全球双端下载量同比下降10%&#xff0c;IAP 收入也同比减少2%。而作为大盘的支柱品类&#xff0c;中重度手游首当其冲。以 RPG 和 SLG 品类为例&#xff0c;虽然…

Halo个人博客Docker部署结合内网穿透为本地站点配置公网地址远程访问

文章目录 前言1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 前言 本文主要介绍如何在Cen…

常见计算机网络协议汇总(非常详细)从零基础入门到精通,看完这一篇就够了

文章目录 前言计算机网络五层模型回顾应用层协议 DNS协议&#xff1a;HTTP协议HTTPS协议 传输层协议 UDP协议TCP 网络层 IP协议ICMP协议 数据链路层 ARP协议 物理层整体的网络传输流程 1️⃣网络安全零基础入门 ① 学习路线② 路线对应学习视频 2️⃣视频配套资料&国内外网…

二分+前缀和+思维,CF 1902D - Robot Queries

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1902D - Robot Queries 二、解题报告 1、思路分析 不管怎么反转: 起点终…

【新品实测】C1001毫米波人体检测传感器来了!跌倒检测、睡眠监测更准确!

我们最近推出了一款全新的60G毫米波产品&#xff1a;C1001毫米波人体检测传感器。在这篇文章中&#xff0c;我们将深入测评这款产品的性能&#xff0c;并详细解析C1001毫米波人体检测传感器的功能和特性。 产品链接&#xff1a;C1001 60GHz毫米波人体检测传感器 原文链接&…

QML ScrollView 实现自动滚动到底部

先看效果,每当有新的日志,会自动添加到Text中,主要实现了ScrollView自动滑动到底部,显示最新的日志 目录 1.思路2.position分析 1.思路 在官网中scrollview并没有关于scrollview位置的设置 但是我们可以控制右边滑动条scrollbar的位置 注意position并不是一个高度数据,你可以…

Adobe Dreamweaver(DW)网页代码编辑器win/mac软件安装下载

一、Adobe DW软件概览 1.1 DW软件简介 Adobe Dreamweaver&#xff08;简称DW&#xff09;是一款功能强大的网页代码编辑器&#xff0c;由Adobe公司开发并维护。其全称为“Adobe Dreamweaver”&#xff0c;中文译为“梦想编织者”。DW集网页制作和管理网站于一身&#xff0c;支…

Allegro PCB位号重排反标原理图步骤

第一步&#xff1a;也是最重要的一步&#xff0c;备份整个工程文件夹。 防止操作过程中误操作导致工程文件出问题&#xff0c;万一出问题&#xff0c;没有备份&#xff0c;调整代价比较大 第二步&#xff1a;确认当前PCB和原理图的网表统一。 稳妥做法&#xff1a; 2a:原理图…

Linux入门——07 动静态库软硬连接

1.动静态库 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xff08;.so&#xff09;&#xff1a;程序在运行的时候才去链接动态库的代码&#xff0c;多个程序共享使用库的代码。一…

如何在VMware ESXI中创建Linux虚拟机并实现异地SSH远程访问

目录 ⛳️推荐 前言 1. 在VMware ESXI中创建Ubuntu虚拟机 2. Ubuntu开启SSH远程服务 3. 安装Cpolar工具 4. 使用SSH客户端远程访问Ubuntu 5. 固定TCP公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

抛苹果卖银行 巴菲特到底怕什么?

文&#xff5c;琥珀食酒社 作者 | 积溪 停不下来、根本就停不下来 94岁的巴菲特还在疯狂卖股票 他到底是看到什么我们没看到的真相 对咱们普通人到底有没有参照价值&#xff1f; 我先说结论 你可以不相信有钱人的人品 但一定要知道有钱人的钱去哪儿了 尤其这个人还是巴…

机房环境监控系统

随着信息技术的飞速发展&#xff0c;数据中心作为信息处理的核心设施&#xff0c;其重要性日益凸显。数据中心内部通常包含大量的服务器、存储设备以及网络设备等关键基础设施&#xff0c;这些设备的稳定运行直接影响到业务的连续性和数据的安全性。因此&#xff0c;建立一个高…

插入排序(直接插入排序和希尔排序)

先写单趟&#xff0c;再写整体。 一、直接插入排序 1.基本思想 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经安排好的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新…