数字IC笔试千题解--编程&&脚本篇(八)

前言

出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的。

所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料整理来自于“数字IC打工人”等数字IC相关公众号,牛客网等网站真题、网络笔试真题及面经抄录。

        保持更新(2023.9.25)文章内含 单选题270道、多选题106道、填空题16道、判断题17道、简答题72道、逻辑推理题3道、C语言 python 脚本编程题8道
在本文中笔者提供的所有代码,都写成了API,可直接copy到软件编译、运行、给出结果。  

        题目较多,即使有前人解析和强大的ChatGPT,也难免出错,若发现错误,欢迎评论区讨论。

        另外夹带一点私货~: 这一刻,我感觉一定要给.....
数字IC笔试千题解总字数已到达15w+,网页码字卡顿情况严重,故将其分割成多个部分以方便维护,链接如下:
数字IC笔试千题解--单选题篇(一)
数字IC笔试千题解--单选题篇(二)
​​​​​​数字IC笔试千题解--多选题篇(三)​​​​​​
数字IC笔试千题解--填空题篇(四)
数字IC笔试千题解--判断题篇(五)
数字IC笔试千题解--简答题篇(六)
数字IC笔试千题解--逻辑推理篇(七)
​​​​​​​​​​​​​​ 数字IC笔试千题解--编程&&脚本篇(八)


python、C语言、脚本编程题

1. 请用C语言写一个程序,计算输入字符串中每个字母的个数(字符串只包括小写字母)。举例如输入字符串为:aaaaabbcccefff,则结果打印为:5a2b3c1e3f。(联发科2022提前批)

答案:C语言编程题,需要记得一些C语言的基本语法,熟悉一下指针和数组,这类题目一般都不会太难。


#include <stdio.h>

void main(){
    char str[100] = {0};
    int count[26] = {0};

    int i = 0;
    int count_index;

    scanf("%s", str);

    while(str[i] != '\0'){
        count_index = (str[i]- 'a');
        count[count_index] = count[count_index] + 1;
        i++;
    }
    for(i=0;i<26;i++){
        if(count[i]!=0){
            printf("%d%c",count[i],'a'+i);
        }
    }
    printf("\n");
}

输出结果:

​​


2. [python]请使用种您熟悉的语言(C, Java, Python)定义二叉树的节点,并使用深度优先搜索,获取一个给定二叉树的最大深度,返回深度值。(联发科2022提前批)(同时也是Leecode easy 题)

比如,给定二叉树[3,9,20, null,null,15,7],

3

/ \

9 20

/ \

15 7

返回它的最大深度3.

答案:定义一个二叉树的结点结构体TreeNode,然后用递归的方式去访问二叉树的所有叶子节点,退出条件为not root,即root = None,即不存在的节点,此时not root 为真,退出该次递归函数。


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:

    def maxDepth(self, root):
        length = 0

        def dfs(root, d):
            nonlocal length
            if not root:
                return
            length = max(length,d)
            dfs(root.left, d+1)
            dfs(root.right, d+1)

        dfs(root, 1)
        return length


if __name__ == '__main__':
    # 定义题中所给的树
    root = TreeNode(3)
    root.left = TreeNode(9)
    node = TreeNode(20)
    root.right = node
    node.left = TreeNode(15)
    node.right = TreeNode(7)

    s = Solution()  # 例化类,才能调用类中的类函数
    print(s.maxDepth(root))

3. [python]给你个字符串表达式s,请使用一种您熟悉的语言(C Java, Python)实现一个基本计算器来计算并返回它的值(运算只包含+-和括号)。(联发科2022提前批)

示例1:

输入:s=“1+1”

输出:2

示例2:

输入:s=“2-1+2”

输出:3

示例3:

输入:s=“2-1+2”

输出:3

示例3:

输入:s=“(1+(4+5+2)-3)+(6+8)”

输出:23

代码:

使用栈存储当前括号外的结果和符号,并使用递归处理括号内的表达式。在循环中分别处理数字、加号、减号和括号。如果遇到数字,则计算当前数字;如果遇到加号或减号,则将当前数字和符号推入栈中,并将当前数字和符号重置;如果遇到左括号,则递归处理括号内的表达式,并返回括号内的计算结果和括号结束的位置;如果遇到右括号,则将当前数字和符号推入栈中,并返回括号外的计算结果以及右括号结束的位置。

最后,我们将栈中的所有数字和符号相加,就可以得到整个表达式的计算结果。


def calculate(s: str) -> int:
    num = 0     # 记录当前数字
    sign = 1    # 记录当前符号
    stack = []  # 用来存储当前括号外的结果和符号
    res = 0     # 用来记录最终结果

    for i in range(len(s)):
        if s[i].isdigit():
            num = num * 10 + int(s[i])
        elif s[i] == '+':
            res += num * sign
            num = 0
            sign = 1
        elif s[i] == '-':
            res += num * sign
            num = 0
            sign = -1
        elif s[i] == '(':
            stack.append(res)    # 先存结果,再存数字
            stack.append(sign)    
            res = 0
            sign = 1
        elif s[i] == ')':
            res += num * sign
            num = 0
            res *= stack.pop()
            res += stack.pop()
        
    return res + num * sign

if __name__ == '__main__':
    s = "(1+(4+5+2)-3)+(6+8)"
    print(calculate(s))

输出结果:23

4. [Python]请用python写一段程序,用尽量少的语句实现下面功能:定义一个函数,判断给定目录下是否存在result.log文件,如果存在,则从result.log文件中找出所有包含fail字样(不区分大小写)的行,并将这些内容保存到一个名为fail.log的文件中,如果文件不存在则抛出异常()(联发科2022提前批)

代码:使用了os模块中的join()函数来拼接目录路径和文件名,open()函数以只读模式打开result.log,并以写入模式打开fail.log文件,lower()函数将每行字符串中的字母转为小写字母,writelines()函数将包含fail字样的行写入fail.log文件中。程序还使用了异常处理机制来处理找不到result.log文件的情况。


import os

def find_fail_lines(dir_path):
    try:
        with open(os.path.join(dir_path, 'result.log'), 'r') as f1, open(os.path.join(dir_path, 'fail.log'), 'w') as f2:
            fail_lines = [line for line in f1 if 'fail' in line.lower()]
            f2.writelines(fail_lines)
            print('Successfully saved fail lines to fail.log')
    except FileNotFoundError:
        print('result.log file not found in the directory')

# example usage
find_fail_lines('E:/modelsim_project/file_handle/')

5.请写段Python代码,打开一个文件,扫描每行,如果该匹配到“biren01”,“biren02”,……“biren99”则以行号Key,将匹配到的“birenxx”保存下来(2022壁仞)

要写这段代码要知道,在 Python 中,可以使用 enumerate 函数来同时获取文件的行号和内容,例如:


with open('file.txt') as file:
    for i, line in enumerate(file, 1):
        print(f"Line {i}: {line}",end="")

其中变量i为行的行号,变量line存储一整行,结果展示如下:

​​

代码:


keywords = {}  # 创建一个空字典,用于保存匹配到的关键字和行号
with open('file.txt') as file:
    for i, line in enumerate(file, 1):
        for j in range(1, 100):
            keyword = f'biren{j:02d}'  # 生成关键字,如 'biren01'、'biren02' 等
            if keyword in line:
                if i not in keywords:  # 如果当前行号还没有在字典中出现过,则添加新的键值对
                    keywords[i] = [keyword]
                else:  # 如果当前行号已经在字典中存在,则将匹配到的关键字添加到已有的列表中
                    keywords[i].append(keyword)
for key, value in keywords.items():
    print(f"行号 {key},匹配到的字符为:{value}")

第五行f'...' 表示一个格式化字符串,其中 {j:02d} 是一个占位符,表示将 j 的值格式化为两位数字,并且如果 j 不足两位,则在前面补零。这里的 d 表示将 j 格式化为十进制整数。因此,对于 j=1,生成的字符串就是 'biren01',代码输出结果如下:

​​


6. 用C语言统计100~1000里面共有多少个素数,并且把所有素数打印出来。素数又称质数。所谓素数是指除了1和它本身以外,不能被任意整数整除的数.

写一个判断是否是素数的函数,返回True or False,做个循环,对i=2到i = 根号num范围进行遍历,如果num对i取模等于零,代表i是num的因数。


#include <stdio.h>

int is_prime(int num) {
    if (num <= 1) {
        return 0;
    }
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int count = 0;
    printf("素数有:");
    for (int i = 100; i <= 1000; i++) {
        if (is_prime(i)) {
            count++;
        }
    }
    printf("共有%d个素数\n", count);
    return 0;
}

7. [python]现在有两个数组a=[1,1,2,4,5],b=[1, 1,2,3,7],请用python/perl实现,找到这两个数组的交集和并集

这里直接用python的集合变量set来做。


a = [1,1,2,4,5]
b = [1,1,2,3,7]
intersection_A_B = set(a)-(set(a)-set(b))
union_A_B = set(a).union(set(b))
print(intersection_A_B)
print(union_A_B)

代码结果:

​​


8. Please use any a programming language to locate the largest element in the matrix(矩阵)and print largest value,row and column of this largest value.

Matrix: matrix [3][4]={{0,1,2,3},{8,7,6,5},{-5,9,-3,4}}


#include <stdio.h>
int main(void){
    int matrix[3][4] = {{0,1,2,3},{8,7,6,5},{-5,9,-3,4}};
    int row,column,max;
    max = 0;
    for (int i =0;i<=2;i++){
        for(int j=0;j<=3;j++){
            if(matrix[i][j]>=max){
                row = i;
                column = j;
                max = matrix[i][j];
            }
        }
    }
    printf("max value is:%d,the row is:%d,the column is:%d\n",matrix[row][column],row+1,column+1);
}

​​

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
图像压缩是一种通过减少图像的数据量来实现图像文件大小的减小的技术。在图像压缩中,主要使用了两种方法:有损压缩和无损压缩。 有损压缩是指压缩过程中会舍弃一些不太重要的图像细节,以减小文件大小。最常用的有损压缩算法是JPEG(Joint Photographic Experts Group)算法。JPEG算法使用了离散余弦变换(DCT)来将原始图像转换为频域中的系数,然后根据系数的重要性对其进行量化和编码。这样可以达到较高的压缩比,但也会引入一定的失真。 无损压缩是指压缩过程中不会丢失任何图像信息。最常用的无损压缩算法是ZIP算法。ZIP算法使用了哈夫曼编码和LZ77算法来寻找重复的数据块并进行压缩。这样可以减小文件大小,但不会改变图像的质量。 在解决图像压缩问题时,可以根据图像的特性来选择适当的压缩算法和参数。如果要求高压缩比并且可以接受一定的失真,可以选择JPEG算法;如果要求保持图像质量并且不要求高压缩比,可以选择ZIP算法。此外,还可以使用其他的图像压缩算法,如PNG、GIF等。 总结来说,图像压缩是通过减少图像的数据量来实现图像文件大小的减小。有损压缩和无损压缩是常用的两种图像压缩方法,分别适用于不同的需求和要求。通过选择合适的压缩算法和参数,可以实现理想的图像压缩效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃葱的酸菜鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值