
C语言
打代码的小明
你会的别人都会
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
虚拟机——TEST编译器(4)
目录1 虚拟机1.1 功能1.2 特点1.3 设计思路2 完整代码3 总结词法分析: 词法分析——TEST编译器(1)语法分析: 语法分析——TEST编译器(2)语义分析: 语义分析——TEST编译器(3)1 虚拟机1.1 功能读取中间代码并执行,此处的虚拟机相当于模拟了一个在机器上运行编译好的TEST代码的过程1.2 特点读取时采用结构体数组code储存指令及其操作数执行时采用操作数栈stack进行操作栈顶寄存器top为栈顶的下一个单元的下标,基址寄存器base为当前函数的数据区在s原创 2020-06-25 12:38:37 · 2562 阅读 · 7 评论 -
语义分析——TEST编译器(3)
目录1 语义分析1.1 功能1.2 错误类型1.3 中间代码1.4 符号表1.5 设计思路2 完整代码3 总结词法分析: 词法分析——TEST编译器(1)语法分析: 语法分析——TEST编译器(2)1 语义分析1.1 功能进行语义检查。对表达式中的操作数进行类型的一致性检查,例如误把函数名误当作变量名使用进行语义处理。对声明语句和可执行语句的处理,其中声明语句(int a ;)将变量名及其有关属性填入符号表把可执行语句生成相应的中间代码。1.2 错误类型函数名重复定义变量名重复定义原创 2020-06-24 12:17:20 · 2567 阅读 · 0 评论 -
语法分析——TEST编译器(2)
目录1 TEST语法规则3 语法分析3.1 功能3.2 特点3.3 错误类型3.4 设计思路4 完整代码5 总结在上一题篇中讲到了词法分析的过程,需要的可以点击查看 词法分析——TEST编译器(1)1 TEST语法规则语法分析是根据TEST语法规则来实现的。语法规则表明了每一个句子长什么样子,组成一个句子的单词都是以怎样的顺序排列的,例如<fun_declaration>表示一个函数,它由 function ID ’(‘ ‘ )’ < function_body> 构成,即函原创 2020-06-23 18:08:11 · 3507 阅读 · 2 评论 -
词法分析——TSET编译器(1)
目录1 编译器1.1 定义1.2 组成1.3 需要实现的功能2 TEST测试语言2.1 TEST词法规则2.2 TEST语法规则3 词法分析3.1 功能3.2 特点4 完整代码5 总结1 编译器1.1 定义编译器就是将高级程序语言翻译成机器语言的工具。可以理解为机器语言是给计算机看的,比较复杂。所以出现了C语言、Java等高级语言,这些语言是更适合人理解的东西,更符合人的逻辑。虽然人能更容易的看懂,但是计算机不知道是什么东西,所以需要一个东西进行翻译,这就是编译器。1.2 组成词法分析:识别单词原创 2020-06-19 16:02:04 · 3333 阅读 · 2 评论 -
快速理解哈夫曼编码和其中的贪心思想
目录1.哈夫曼编码原理2.哈夫曼树2.1构造规则2.2构造时要注意的内容3编码3.1编码规则4解码4.1解码规则4.2解码要注意的内容5.实例代码6.贪心思想7.总结1.哈夫曼编码原理 根据字符出现的概率大小进行编码,出现概率高的字符使用较短的编码,出现概率低的字符使用较长的编码,从而使平均码长尽可能短。是数据压...原创 2020-04-28 19:20:07 · 4717 阅读 · 0 评论 -
ACM-ICPC 2018 南京赛区网络预赛 sum(欧拉筛)
学了欧拉筛之后找了这道题来练练手,结果写了好久才过了题意:一个数字可以由多个数字相乘构成,统计一个数能有几种构成方法f(i),但是相乘的数字必须是无平方数,例如:6=2x3=3x2=1x6, 但是 8=2x4=2x2^2这样就不行。a x b 和b x a要算两个,a x a算一个。最后需要输入一个数n,输出1~n所有数构成方法的和理解:需要得到无平方数只有两种可能:1和素数,所以我们需要...原创 2019-10-05 22:47:41 · 280 阅读 · 0 评论 -
素数判断方法总结
今天想总结一下素数的几种求法暴力方法:最简单的方法就是从2开始循环到n,如果没有一个数能被n整除就是素数#include<stdio.h>int isPrime(int n) { for(int i=2; i<n; i++) { if(n%i == 0) return 0 ; } return 1 ;}i...原创 2019-10-05 21:55:37 · 828 阅读 · 0 评论 -
最短路径之寻找最大边的最小值(Floyd、Dijkstra、Kruskal)
最近在做最短路径的题目,有几道题是同一个类型的,题意基本都是寻找从A到B所有路径中,路径的最大边的最小值。这样类型的题有POJ - 2253 Frogger, UVA - 10048 Audiophobia,POJ - 1797 Heavy Transportation这样的题有很多种解题方法,最简单粗暴的就是用Floyd,还可以用Dijkstra,也可以用最小生成树Kruskal我以POJ ...原创 2019-10-04 16:35:49 · 3941 阅读 · 0 评论 -
HDU 1003 Max Sum
这是一道动态规划的题目,刚学了一点动态规划还不太熟悉,这一道题研究了很久才做出来题目大意:输入n个数字,其中的数字可以按排列顺序相加,找出相加值最大的子序列,输出该最大值和起点终点思路:该题使用dp来做,整体的思路根据 max{dp[i]+sum, dp[i]} 来判断, 数字相加不是一遇到负数就停止相加,而是直到发现之前相加的结果成了负数为止。我们可以设置变量ans存储最终的结果、变量...原创 2019-09-19 20:48:07 · 239 阅读 · 0 评论 -
POJ - 1852 Ants
这题只要有想象力就能很简单过题意:一根n厘米长的线上有多只蚂蚁,蚂蚁顺着线走,但方向不知道,如果两只蚂蚁碰到一起就都掉头然后继续前进直到从线的两端掉下。蚂蚁每次移动的速度为1cm/s 。要求输出所有蚂蚁都掉下去需要用的最短时间和最长时间思路:时间最短:如果所有蚂蚁都不会互相碰到一起就不会额外产生多余的步数,则以线长度的中值为界,左边的都往左走,右边的都往右走,这样所有蚂蚁都不会碰到一起而...原创 2019-08-22 18:04:28 · 250 阅读 · 0 评论 -
POJ-3083 Children of the Candy Corn
这是一道深搜加广搜的题目,在房间里模拟走迷宫走了两圈才搞清楚原理,因为在一些小细节的地方出错,花了很久才解决了这道题,对我来说还是很有意义的一道题,用的是C写的题目大意:在迷宫中从起点走到终点,每走一步加一,起点和终点也要加一。要求输出三种不同的移动方式所需的步数,分别是一直靠着左边走、一直靠着右边走、最短路径。靠左和靠右走有点不好理解,接下来重点研究一下。难点:靠左走的意思是:每走一步...原创 2019-08-19 17:29:21 · 329 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛 Characters with Hash
这是一道水题,但是觉得其中寻找先导零使用的方法很好用,就决定写下来.用的是C题目大意:输入T组数据,每组数据输入一个根字母、一个数字n代表将要输入的字母的个数、n个连续字母,然后用根字母减去从左往右的每一个字母,得到的结果总共有几位最后就输出几。其中要除去先导零,首个字母减完后只有一位数就算一个,中间的若只有一位就算两个,若结果全是0,输出1。举例:12 34 56 输出:600 12 ...原创 2019-08-04 21:30:24 · 257 阅读 · 0 评论