Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >贪心法

贪心法

作者头像
开源519
发布于 2020-09-14 08:55:22
发布于 2020-09-14 08:55:22
39500
代码可运行
举报
文章被收录于专栏:开源519开源519
运行总次数:0
代码可运行

1

介绍

所谓贪心法,是c语言针对c程序组合符号(“==、++、--、+=等”)结合上下文识别的一种方法。“每个字符应该包含更多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个字符一个字符的读入,如果该字符可能组成一个符号,就再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串不再可能组成一个有意义的符号。这种处理方法,又称为“贪心法”,或者“大嘴法””。

举个“栗子”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(void){
    int a[6] = {10,2,10,2,10,2};

    printf("%d --- %d = %d\n",   a[0], a[1], a[0]---a[1]);
    printf("%d - -- %d = %d\n" , a[2], a[3], a[2]- --a[3]);
    printf("%d -- - %d = %d\n" , a[4], a[5], a[4]-- -a[5]);
}

看一下程序执行出来的结果:

是不是感觉很简单的代码,输出的结果却与想象的大相径庭呢?

2

分析一下输出结果:

第一行输出:

根据贪心法规则,a[0]---a[1]会形成a[0]-- -a[1],由于a[0]--的结果是在运算后执行,所以这个表达式的值为8。那么为什么是9 --- 2而不是10 --- 2呢?这就跟printf的执行顺序有关了,其是从右向左执行,当a[0] --- a[1]完全执行完才会打印,而打印时,a[0]--已经执行完毕,所以此时a[0]打印出来的的值为9。

第二行输出:

先执行--a[3],此时a[3]值为1,再执行a[2]- a[3],所以表达式值9。输出结果为10 - -- 1 = 9。

第三行输出:

与第一行相同。

3

总结

在码代码时,我们很容易出现多打-这种疏忽,而这种问题编译器并不会报错,从而导致代码执行无误,但是结果却与预期相差较大。贪心法对其他符号同样适用,了解编译器贪心法,对于以后规避错误很有帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源519 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
贪心法
Eg.贪心法,钞票支付问题 有1元、5元、10元、20元、100元、200元的钞票无穷多张。现使用这些钞 票支付X元,最少需要多少张? 例如,X = 628 最佳支付方法: 3张200块的,1张20
小飞侠xp
2018/08/29
5490
算法设计策略----贪心法
最优化问题:问题给出某些约束条件,满足这些约束条件的解称为可行解;为了衡量可行解的好坏,问题还给出了目标函数,使目标函数取最大(小)值的可行解称为最优解。 贪心法是求解最优化问题的一种设计策略。贪心法通过分步决策来求解问题。在对问题求解时,总是做出在当前这一步看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心法在每一步上用作决策依据的选择准则被称为最优量度标准或贪心准则,这种量度标准通常只考虑局部最优性。 贪心法基本要素: 最优度量标准:所谓贪心法的最优度量标准
SuperHeroes
2018/05/30
5430
算法书上都没写,背包问题为什么不能用贪心法解?
上周我们一起聊了贪心法的原理,并且一起解析了两道例题。可能因为标题起的不好,很多小伙伴当成广告了。错过的小伙伴可以点一下下方的传送门,回顾一下上期的内容。
TechFlow-承志
2022/08/26
1.1K0
【精选】算法设计与分析(第七章贪心法)
命运之光
2024/03/20
1440
【C语言】常见的C语言概念
那人和计算机是怎么交流的呢? 使用计算机语言。 目前已知已经有上千种计算机语言,人们们是通过计算机语言写的程序,给计算机下达指令,让计算机工作的。 C语言就是众多计算机语言中的⼀种,当然C++/Java/Go/Python都是计算机语言。
zxctscl
2024/09/20
1.1K0
【C语言】常见的C语言概念
【算法分析】贪心法详解+范例+习题解答
顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。希望贪心算法得到的最终结果是整体最优的。贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。
司六米希
2022/11/15
1.2K0
【算法分析】贪心法详解+范例+习题解答
【C语言】常见概念
目前已知已经有上千种计算机语言,人们通过计算机语言写的程序,给计算机下达指令,让计算机工作。
云边有个稻草人
2024/10/21
2570
【C语言】常见概念
第2讲:C语言数据类型和变量
使用 整型类型来描述整数,使用 字符类型来描述字符,使用 浮点型类型来描述小数。
用户11290648
2024/09/25
2510
第2讲:C语言数据类型和变量
第1讲:C语言常见概念
目前已知已经有上千种计算机语言,人们是通过计算机语言写的程序,给计算机下达指令,让计算机工作的(比如excel表格帮我们统计一些事情,教务系统对同学们的信息、作业进行管理)。
用户11290648
2024/09/25
1780
第1讲:C语言常见概念
c语言格式大整理
1、C语言中,非零值为真,真用1表示;零值为假,假用0表示。 2、转义字符参考: \a 蜂鸣,响铃 \b 回退:向后退一格 \f 换页 \n 换行 \r 回车,光标到本行行首 \t 水平制表 \v 垂
Gxjun
2018/03/21
3.2K0
c语言格式大整理
【C/C++】C语言特性总结
已经有大约半年的时间没有碰C语言了,当时学习的时候记录了很多的笔记,但是都是特别混乱,后悔那个时候,不懂得写博客,这里凭借记忆和零零散散的笔记记录,尝试系统性地复习一下C语言。
用户7886150
2021/02/13
1.1K0
Yacc 与 Lex 快速入门(词法分析和语法分析)
我们知道,高级语言,一般的如c,java等是不能直接运行的,它们需要经过编译成机器认识的语言。即编译器的工作。
黄规速
2022/04/14
6.2K0
Yacc 与 Lex 快速入门(词法分析和语法分析)
Java正则速成秘籍(二)之心法篇
根据文章内容总结的摘要
静默虚空
2018/01/05
2.4K0
Java正则速成秘籍(二)之心法篇
C语言常见概念
<font color = red>⼈和⼈交流使⽤的是⾃然语⾔,如:汉语、英语、⽇语</font>
用户11318784
2024/11/12
1310
C语言常见概念
第二节(C语句储存信息,表达式和运算符)
变量:是计算机内存中一个已命名的数据存储位置。在程序中使用变量名,实际上是引用储存在该位置的数据。
冷影玺
2023/10/11
5840
第二节(C语句储存信息,表达式和运算符)
算法之美:0-1背包问题(动态规划法,回溯法,贪心法)
2.回溯法:按选优条件向前搜索,以达到目标。 但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择
Gabriel
2022/11/15
3790
算法与数据结构高手养成:朴素的贪心法(上)最优化策略
由于条件限制,不能做到每次都拿最多,如果第一次拿3,第二次拿4时,第三次就不能再拿了
Srlua
2024/05/30
1440
算法与数据结构高手养成:朴素的贪心法(上)最优化策略
[基础]《C Primer》笔记(上篇)
要把一个较小的常量作为long类型对待时,可以在值的末尾加上L后缀(小写的l不容易和数字1区分)。在支持long long的系统中,可以在值的末尾加上LL区分long long类型。
TOMOCAT
2020/06/09
2.2K0
[基础]《C Primer》笔记(上篇)
Leetcode分类——贪心算法
最优解能够划分成多个次优解,例如找零钱问题中,零钱的种类必须是倍数包含关系(如100,20,10,15,1元),如果包含了50元或7元类型,贪心法求解可能出错,此时应该使用动态规划来做。
matt
2022/10/25
2330
Leetcode分类——贪心算法
自己动手写编译器:从正则表达式到NFA状态机
在编译器开发中有两个非常重要的工具名为lex和yacc,他们是编译器的生成器。本质上我们不需要一行行去完成编译器的代码,只需要借助这两个工具,同时制定好词法解析和语法解析的规则后,这两个工具就会自动帮我们把代码生成,我们后续的任务就是使用go语言将这两个工具实现。
望月从良
2022/12/02
1.3K0
自己动手写编译器:从正则表达式到NFA状态机
相关推荐
贪心法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档