博客
关于我
NI笔试——大数加法
阅读量:792 次
发布时间:2023-02-16

本文共 1291 字,大约阅读时间需要 4 分钟。

NI笔试题解

今天参加了一场笔试,遇到了三个有趣的问题。让我来分享一下我的解题思路和代码实现。

第一题是找出字符串第一次出现的字符。这个问题可以通过建立字符出现次数的哈希表来解决。具体步骤是:首先扫描整个字符串,统计每个字符的出现次数;然后再次遍历字符串,找出第一个出现次数为1的字符。

第二题是大数加法。由于之前写过大数乘法函数,所以我误以为这题是乘法。后来仔细阅读题目后,意识到应该实现字符串加法功能。加法的实现思路是:使用两个数组分别存储两个字符串的数字,逐位进行加法运算。当某一位的和大于等于10时,进位处理。

以下是实现代码:

void Add(char s1[], char s2[]) {    int num1[M], num2[M];    int i, j;    int len1 = strlen(s1);    int len2 = strlen(s2);        // 读取数字到数组中,num[0]存储最低位    for (i = len1 - 1, j = 0; i >= 0; i--) {        num1[j++] = s1[i] - '0';    }    for (i = len2 - 1, j = 0; i >= 0; i--) {        num2[j++] = s2[i] - '0';    }        // 进行加法运算    for (i = 0; i < M; i++) {        num1[i] += num2[i];        if (num1[i] > 9) {            num1[i] -= 10;            if (i + 1 < M) {                num1[i + 1]++;            }        }    }        // 找到最高有效位    for (i = M; i >= 0 && num1[i] == 0; i--) {        if (i > 0) {            for (j = 0; j < i; j++) {                printf("%d", num1[j]);            }            printf("%d\n", num1[i]);        } else {            printf("0\n");        }    }}

第三题是一个二维数组中的路径问题。题目要求找出一条路径,使其和最小。这个问题类似于最长公共子序列问题,采用动态规划的方法解决。具体来说,需要构建一个二维数组dp[i][j]表示从起点(i,j)出发到终点(i,j)的最小路径和。通过逐步填充dp数组,找到最小路径。

关于这道题,我觉得可以借鉴最长公共子序列的解法,具体细节需要后续深入思考。

整体来说,这次笔试题目有挑战性,但通过仔细分析和合理设计数据结构,逐一解决了每个问题。希望下次能有更多时间深入思考和练习。

转载地址:http://ucjfk.baihongyu.com/

你可能感兴趣的文章
new 一个button 然后dispose,最后这个button是null吗???
查看>>
next项目部署到服务器pm2进程守护
查看>>
nexus 介绍
查看>>
nexus上传jar
查看>>
Nexus指南中的更新强调集成和透明度的重要性
查看>>
Nexus指南已经发布
查看>>
Nexus(1):Nexus的安装与配置
查看>>
NFinal学习笔记 02—NFinalBuild
查看>>
NFS
查看>>
NFS Server及Client配置与挂载详解
查看>>
NFS 服务配置篇
查看>>
NFS共享文件系统搭建
查看>>
nfs复习
查看>>
NFS安装配置
查看>>
NFS服务器配置-服务启动与停止
查看>>
NFS的安装以及windows/linux挂载linux网络文件系统NFS
查看>>
NFS的常用挂载参数
查看>>
NFS网络文件系统
查看>>
NFS远程目录挂载
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>