‘壹’ acm竞赛知识点
1. acm常用小知识点
acm常用小知识点 1.ACM 关于ACM程序设计竞赛,需要掌握哪些知识点,最好能详细一
训练过ACM等程序设计竞赛的人在算法上有较大的优势,这就说明当你编程能力提高之后,主要时间是花在思考算法上,不是花在写程序与debug上。
下面给个计划你练练:第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来。1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除4.二分查找. (代码可在五行以内) 5.叉乘、判线段相交、然后写个凸包. 6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简) 7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式. 8. 调用系统的qsort, 技巧很多,慢慢掌握. 9. 任意进制间的转换第二阶段:练习复杂一点,但也较常用的算法。
如: 1. 二分图匹配(匈牙利),最小路径覆盖 2. 网络流,最小费用流。 3. 线段树. 4. 并查集。
5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp 6.博弈类算法。博弈树,二进制法等。
7.最大团,最大独立集。 8.判断点在多边形内。
9. 差分约束系统. 10. 双向广度搜索、A*算法,最小耗散优先.第三阶段: 前两个阶段是打基础,第三阶段是锻炼在比赛中可以快速建立模型、想新算法。这就要平时多做做综合的题型了。
1. 把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。 2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来做:-P ) 3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的实力. 4. 一道题不要过了就算,问一下人,有更好的算法也打一下。
5. 做过的题要记好 :-)下面转自:ACMer必备知识(任重而道远。)
图论 路径问题 0/1边权最短路径 BFS 非负边权最短路径(Dijkstra) 可以用Dijkstra解决问题的特征 负边权最短路径 Bellman-Ford Bellman-Ford的Yen-氏优化 差分约束系统 Floyd 广义路径问题 传递闭包 极小极大距离 / 极大极小距离 Euler Path / Tour 圈套圈算法 混合图的 Euler Path / Tour Hamilton Path / Tour 特殊图的Hamilton Path / Tour 构造 生成树问题 最小生成树 第k小生成树 最优比率生成树 0/1分数规划 度限制生成树 连通性问题 强大的DFS算法 无向图连通性 割点 割边 二连通分支 有向图连通性 强连通分支 2-SAT 最小点基 有向无环图 拓扑排序 有向无环图与动态规划的关系 二分图匹配问题 一般图问题与二分图问题的转换思路 最大匹配 有向图的最小路径覆盖 0 / 1矩阵的最小覆盖 完备匹配 最优匹配 稳定婚姻 网络流问题 网络流模型的简单特征和与线性规划的关系 最大流最小割定理 最大流问题 有上下界的最大流问题 循环流 最小费用最大流 / 最大费用最大流 弦图的性质和判定组合数学 解决组合数学问题时常用的思想 逼近 递推 / 动态规划 概率问题 Polya定理计算几何 / 解析几何 计算几何的核心:叉积 / 面积 解析几何的主力:复数 基本形 点 直线,线段 多边形 凸多边形 / 凸包 凸包算法的引进,卷包裹法 Graham扫描法 水平序的引进,共线凸包的补丁 完美凸包算法 相关判定 两直线相交 两线段相交 点在任意多边形内的判定 点在凸多边形内的判定 经典问题 最小外接圆 近似O(n)的最小外接圆算法 点集直径 旋转卡壳,对踵点 多边形的三角剖分数学 / 数论 最大公约数 Euclid算法 扩展的Euclid算法 同余方程 / 二元一次不定方程 同余方程组 线性方程组 高斯消元法 解mod 2域上的线性方程组 整系数方程组的精确解法 矩阵 行列式的计算 利用矩阵乘法快速计算递推关系 分数 分数树 连分数逼近 数论计算 求N的约数个数 求phi(N) 求约数和 快速数论变换 …… 素数问题 概率判素算法 概率因子分解数据结构 组织结构 二叉堆 左偏树 二项树 胜者树 跳跃表 样式图标 斜堆 reap 统计结构 树状数组 虚二叉树 线段树 矩形面积并 圆形面积并 关系结构 Hash表 并查集 路径压缩思想的应用 STL中的数据结构 vector deque set / map动态规划 / 记忆化搜索 动态规划和记忆化搜索在思考方式上的区别 最长子序列系列问题 最长不下降子序列 最长公共子序列 最长公共不下降子序列 一类NP问题的动态规划解法 树型动态规划 背包问题 动态规划的优化 四边形不等式 函数的凸凹性 状态设计 规划方向线性规划常用思想 二分 最小表示法串 KMP Trie结构 后缀树/后缀数组 LCA/RMQ 有限状态自动机理论排序 选择/冒泡 快速排序 堆排序 归并排序 基数排序 拓扑排序 排序网络。
2.ACM需要具备什么知识
ACM国际大学生程序设计竞赛(ACM/ICPC :ACM International Collegiate Programming Contest)是由国际计算机界历史悠久、颇具权威性的组织ACM( 美国计算机协会)学会(Association for puter Machineary)主办,是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自已分析问题和解决问题的能力。该项竞赛从1970年举办至今已历25届,因历届竞赛都荟萃了世界各大洲的精英,云集了计算机界的“希望之星”,而受到国际各知名大学的重视,并受到全世界各着名计算机公司如Microsoft(微软公司) 、IBM等的高度关注,成为世界各国大学生最具影响力的国际级计算机类的赛事,ACM所颁发的获奖证书也为世界各着名计算机公司、各知名大学所认可。
该项竞赛是年度性竞赛,分区域预赛和国际决赛两个阶段进行,各预赛区第一名自动获得参加世界决赛的资格,世界决赛安排在每年的3~4月举行,而区域预赛安排在上一年的9月~12月在各大洲举行。从1998年开始,IBM公司连续5年独家赞助该项赛事的世界决赛和区域预赛。这项比赛是以大学为单位组队(每支队由教练、3名正式队员,一名后备队员组成)参赛,要求在5个小时内,解决5~8到题目。
ACM/ICPC的区域预赛是规模很大,范围很广的赛事,近几年,全世界有1000多所大学, 2000多支参赛队在六大洲的28~30个赛站中争夺世界决赛的60~66个名额,去年我校举办的区域预赛,就有来自50多所高校的100多支队伍参加,其激烈程度可想而知。
与其他编程竞赛相比,ACM/ICPC题目难度更大,更强调算法的高效性,不仅要解决一个指定的命题,而且必需要以最佳的方式解决指定的命题;它涉及知识面广,与大学计算机系本科以及研究生如程序设计、离散数学、数据结构、人工智能、算法分析与设计等相关课程直接关联,对数学要求更高,由于采用英文命题,对英语要求高,ACM/ICPC采用3人合作、共用一台电脑,所以它更强调团队协作精神;由于许多题目并无现成的算法,需要具备创新的精神,ACM/ICPC不仅强调学科的基础,更强调全面素质和能力的培养。ACM/ICPC是一种全封闭式的竞赛,能对学生能力进行实时的全面的考察,其成绩的真实性更强,所以目前已成为内地高校的一个热点,是培养全面发展优秀人材的一项重要的活动。概括来说就是:强调算法的高效性、知识面要广、对数学和英语要求较高、团队协作和创新精神。
3.ACM需要那些方面的知识
一、语言是最重要的基本功 无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要 过的第一道关。
亚洲赛区的比赛支持的语言包括C/C++与JAVA。笔者首先说说JAVA,众所 周知,作为面向对象的王牌语言,JAVA在大型工程的组织与安全性方面有着自己独特的 优势,但是对于信息学比赛的具体场合,JAVA则显得不那么合适,它对于输入输出流的 操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++慢10倍以上,而 竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出 了更高的要求,是相当不利的。
其实,笔者并不主张大家在这种场合过多地运用面向对 象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码,也会 降低程序的执行效率。 接着说C和C++。
许多现在参加讲座的同学还在上大一,C的基础知识刚刚学完,还没 有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效 率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高 了自己在算法设计上的造诣,纯C一样能发挥巨大的威力。 而C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的 可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。
如果有些同 学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间 的。 C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一 接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。
但是 ,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必 须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法; 另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂 度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。 通过以上的分析,我们可以看出仅就信息学竞赛而言,对语言的掌握并不要求十分 全面,但是对于经常用到的部分,必须十分熟练,不允许有半点不清楚的地方,下面我 举个真实的例子来说明这个道理——即使是一点很细微的语言障碍,都有可能酿成错误 : 在去年清华的赛区上,有一个队在做F题的时候使用了cout和printf的混合输出,由 于一个带缓冲一个不带,所以输出一长就混乱了。
只是因为当时judge team中负责F题的 人眼睛尖,看出答案没错只是顺序不对(答案有一页多,是所有题目中最长的一个输出 ),又看了看程序发现只是输出问题就给了个Presentation error(格式错)。如果审 题的人不是这样而是直接给一个 Wrong Answer,相信这个队是很难查到自己错在什么地 方的。
现在我们转入第二个方面的讨论,基础学科知识的积累。 二、以数学为主的基础知识十分重要 虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的 思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。
今年World Final的总冠军是波兰华沙大学,其成员出自于数学系而非计算机系,这就是一个鲜活的 例子。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有 一定应用,但是不多。
因此,大一的同学也不必为自己还没学数据结构而感到不知从何 入手提高,把数学捡起来吧!下面我来谈谈在竞赛中应用的数学的主要分支。 1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支, 其重中之重又在于图论和组合数学,尤其是图论。
图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许 多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大 ,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到 力不从心,也不必着急,可以慢慢积累。
竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于 图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些 部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难 题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。
2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解 决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想 上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码 学常识确定大概的过程之后,核心算法往往要涉及数论的内容。
3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知 识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算 、内点外点的判断、凸包等。
4.ACM需要那些方面的知识
一、语言是最重要的基本功 无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要 过的第一道关。
亚洲赛区的比赛支持的语言包括C/C++与JAVA。笔者首先说说JAVA,众所 周知,作为面向对象的王牌语言,JAVA在大型工程的组织与安全性方面有着自己独特的 优势,但是对于信息学比赛的具体场合,JAVA则显得不那么合适,它对于输入输出流的 操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++慢10倍以上,而 竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出 了更高的要求,是相当不利的。
其实,笔者并不主张大家在这种场合过多地运用面向对 象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码,也会 降低程序的执行效率。 接着说C和C++。
许多现在参加讲座的同学还在上大一,C的基础知识刚刚学完,还没 有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效 率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高 了自己在算法设计上的造诣,纯C一样能发挥巨大的威力。 而C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的 可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。
如果有些同 学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间 的。 C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一 接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。
但是 ,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必 须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法; 另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂 度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。 通过以上的分析,我们可以看出仅就信息学竞赛而言,对语言的掌握并不要求十分 全面,但是对于经常用到的部分,必须十分熟练,不允许有半点不清楚的地方,下面我 举个真实的例子来说明这个道理——即使是一点很细微的语言障碍,都有可能酿成错误 : 在去年清华的赛区上,有一个队在做F题的时候使用了cout和printf的混合输出,由 于一个带缓冲一个不带,所以输出一长就混乱了。
只是因为当时judge team中负责F题的 人眼睛尖,看出答案没错只是顺序不对(答案有一页多,是所有题目中最长的一个输出 ),又看了看程序发现只是输出问题就给了个Presentation error(格式错)。如果审 题的人不是这样而是直接给一个 Wrong Answer,相信这个队是很难查到自己错在什么地 方的。
现在我们转入第二个方面的讨论,基础学科知识的积累。 二、以数学为主的基础知识十分重要 虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的 思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。
今年World Final的总冠军是波兰华沙大学,其成员出自于数学系而非计算机系,这就是一个鲜活的 例子。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有 一定应用,但是不多。
因此,大一的同学也不必为自己还没学数据结构而感到不知从何 入手提高,把数学捡起来吧!下面我来谈谈在竞赛中应用的数学的主要分支。 1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支, 其重中之重又在于图论和组合数学,尤其是图论。
图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许 多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大 ,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到 力不从心,也不必着急,可以慢慢积累。
竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于 图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些 部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难 题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。
2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解 决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想 上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码 学常识确定大概的过程之后,核心算法往往要涉及数论的内容。
3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知 识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算 、内点外点的判断、凸包等。
5.ACM需要具备什么知识
ACM国际大学生程序设计竞赛(ACM/ICPC :ACM International Collegiate Programming Contest)是由国际计算机界历史悠久、颇具权威性的组织ACM( 美国计算机协会)学会(Association for puter Machineary)主办,是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自已分析问题和解决问题的能力。该项竞赛从1970年举办至今已历25届,因历届竞赛都荟萃了世界各大洲的精英,云集了计算机界的“希望之星”,而受到国际各知名大学的重视,并受到全世界各着名计算机公司如Microsoft(微软公司) 、IBM等的高度关注,成为世界各国大学生最具影响力的国际级计算机类的赛事,ACM所颁发的获奖证书也为世界各着名计算机公司、各知名大学所认可。
该项竞赛是年度性竞赛,分区域预赛和国际决赛两个阶段进行,各预赛区第一名自动获得参加世界决赛的资格,世界决赛安排在每年的3~4月举行,而区域预赛安排在上一年的9月~12月在各大洲举行。从1998年开始,IBM公司连续5年独家赞助该项赛事的世界决赛和区域预赛。这项比赛是以大学为单位组队(每支队由教练、3名正式队员,一名后备队员组成)参赛,要求在5个小时内,解决5~8到题目。
ACM/ICPC的区域预赛是规模很大,范围很广的赛事,近几年,全世界有1000多所大学, 2000多支参赛队在六大洲的28~30个赛站中争夺世界决赛的60~66个名额,去年我校举办的区域预赛,就有来自50多所高校的100多支队伍参加,其激烈程度可想而知。
与其他编程竞赛相比,ACM/ICPC题目难度更大,更强调算法的高效性,不仅要解决一个指定的命题,而且必需要以最佳的方式解决指定的命题;它涉及知识面广,与大学计算机系本科以及研究生如程序设计、离散数学、数据结构、人工智能、算法分析与设计等相关课程直接关联,对数学要求更高,由于采用英文命题,对英语要求高,ACM/ICPC采用3人合作、共用一台电脑,所以它更强调团队协作精神;由于许多题目并无现成的算法,需要具备创新的精神,ACM/ICPC不仅强调学科的基础,更强调全面素质和能力的培养。ACM/ICPC是一种全封闭式的竞赛,能对学生能力进行实时的全面的考察,其成绩的真实性更强,所以目前已成为内地高校的一个热点,是培养全面发展优秀人材的一项重要的活动。概括来说就是:强调算法的高效性、知识面要广、对数学和英语要求较高、团队协作和创新精神。
6.ACM常用的经典算法
大概分为数论算法,图论算法,A*算法。
数论算法:
排序(选择,冒泡,快速,归并,堆,基数,桶排序等)
递归,回溯
概率,随机
公约数,素数
因数分解
矩阵运算
线性规划
最小二乘
微积分
多项式分解和级数
图论算法:
哈夫曼树(即最优二叉树)
哈希表
Prim,Kruskal算法(即最小生成树算法)
红黑树
a-B剪枝法
深、广度搜索
拓扑排序
强连通分量
Dijkstra,Bellman-Ford,Floyd-Warashall算法(最短路径算法)
计算几何(线段相交,凸包,最近点对)
A*算法:
动态规划
贪心算法
KMP算法
哈密顿回路问题
子集问题
博弈(极大极小值算法等)
7.参加ACM需要准备哪些知识
学ACM要熟练C语言的基础语法,对编程有很大的兴趣,还要学关于数据结构的知识。
内容大多数是考数据结构,例如:深度搜索(dfs)、广度搜索(bfs)、并查集、母函数、最小生成树、数论、动态规划(重点)、背包问题、最短路、网络流……还有很多算法,我列出这些是经常考到的,我也在学习上述所说的。 最好买一本《数据结构》或者关于算法的书看看,看完一些要自己动手实践做题,做题的话去杭电acm做题,里面有很多很基础的题,不错的。
资料的话,网络有很多,我多数都是网络或者 *** ,还有可以看看别人的博客的解题报告,里面有详细的介绍,不懂还可以问问同学师兄的。 对了,还有一点,acm比赛都是英文题目的,比赛时带本字典查吧。
希望我说的你能满意,祝你能在acm方面有所收获。
‘贰’ 听说美国有个AMC编程大赛的组织,关于这个的知识,谁知道啊给我分享一下啊
ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest – ACM-ICPC)由国际计算机学界着名的ACM学会(Association for Computer Machinery)主办,是世界上规模最大、水平最高的国际大学生程序竞赛。每年举办一次。ACM成立于计算机诞生次年,是目前计算机学界中历史最悠久、最具权威性的组织。
ACM国际性大学生程序设计竞赛自1970年开始,其宗旨是使大学生能通过计算机充分展示自己分析问题和解决问题的能力。参加本项比赛的选手至少需要掌握计算机科学的常用算法,基本的计算理论,(如:离散数学,具体数学,组合数学基础),数据结构基础,程序设计语言(规定是C/C++或者是Java)。在本项比赛中考察学生的不仅仅是能够完成指定任务的程序,更要求在完成程序的功能的基础之上提高程序的运行效率与空间占用率。我在浙江大学ACM在线测试组参加测试的最深体会就是你时时刻刻都应当去考虑如何去最大限度的优化,改善你的程序结构,已达到用最小的空间,最优的算法实现程序的功能。从数学角度考虑,题目主要的方向集中在工程数学,抽象数学很少涉及。一般题目都会给出要求和几组输入和输出作为程序设计的参考,也是检验程序正确性的标准之一。
整个竞赛分为地区预赛(Regional Contest)和决赛(Final Contest)两个阶段进行。今年(2003)在中国大陆地区举行的ACM-ICPC区赛共有两个赛区,分别由北京清华大学和广州中山大学承办。我们学校的计算机学院从去年起开始组织学生参加世界上最具权威性的大学生程序设计竞赛,取得了较好的成绩,我们学院在明年也要有组织的参加这项国际性的大赛,希望有志于此的同学加入我们的行列。我们会定期的举办相关的讲座以使同学们对ACM-ICPC比赛有更多地了解。鉴于我院学生对这项比赛了解的实际情况,下面我就从浙江大学的在线题库中选择了Volume I当中的第一个题目向大家展示一下这项比赛的特点。
Calculate a + b
Input
The input will consist of a series of pairs of integers a and b,separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input.
Sample Input
1 5
Sample Output
6
Hint
Use + operator
如果选用的程序设计语言是 C++:
#include
int main()
{
int a,b;
while(cin >> a >> b)
cout << a+b << endl;
}
如果选用的程序设计语言是C:
#include
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
}
如果选用的程序设计语言是PASCAL
program p1001(Input,Output);
var
a,b:Integer;
begin
while not eof(Input) do
begin
Readln(a,b);
Writeln(a+b);
end;
end.
程序的功能中文描述是这样的:在一行输入两个整型数,换行输出结果,循环执行,直到用户中止。
三个程序代码都摆出来了,虽然这个程序极其简单,但是可以说明很多语言的特点以及程序设计的思想,大家可以清楚地看到与一般的思路最大不同点就是没有使用循环语句for,而是选择while,结合程序设计语言自身的特点,从而大大的减少了代码量,而且不易出错。下面我把这个程序关键点的原理阐述一下:
针对题目的要求,要保证无数次输入下程序的健壮性,而while语句这点的优势就是及其突出的,此种情况下,我们通常采用在while循环结构的首部使用流读取运算符输入一系列值。当遇到文件结束符或者是非法输入时运算符返回0(false)这种结构非常适合事先并不知道有多少组输入时,那么下面我们在着重说一下cin在这里的用法.
上面的C++算法描述中,程序的跳出我们采用输入非法字符,一旦输入非法字符,则返回值为0(false)则,while循环结束,也就是输入输出流当中初学者不太常使用的流错误。
下面我们做一个简单的介绍:
对于输入输出流的状态,我们可以用类ios中的位测试流的状态。类ios是输入/输出类istream,ostream和iostream的基类。当遇到文件结束符时,输入流中自动设置eofbit.可以在程序中使用成员函数eof确定是否已经到达文件尾。如果cin遇到了文件的结束符,那么函数调用:
cin.eof()
返回true,否则返回false
当流中发生格式错误的时候,虽然会设置failbit,但是字符并未丢失。成员函数fail判断流操作是否失败,这种错误通常可恢复。
当发生导致数据丢失的错误时,设置badbit.成员函数bad判断流操作是否失败,这种严重错误通常不可恢复。
如果eofbit,failbit,badbit都没有设置,则设置goodbit
如果函数eo,fail,bad都没有设置,则成员函数good返回true.成员函数中应当只对合法流进行I/O操作。
下面是为说明问题专门写的一个测试代码,
#include
int main()
{
int a;
cin << a;
cout >>cin.eof();
cout >>cin.fail();
cout >>cin.bad();
cout >>cin.good();
}
大家可以试一试,分别输入合法的整型数和非法的字符型数,比较结果就能够比较好的领会这部分内容了。另外两种语言的原理很容易看懂,就不傲述了,总之就想通过这个问题说明:问题看似简单,实则包含着很多内容,再简单的程序我们都要结合语言的自身特点,以一种最优化的结构去表达他, 不要忽视任何的小问题。
‘叁’ 算法设计比赛做什么算法好
应该是ACM吧
就是给你8-10道算法题目,5个小时,做出来多的题目数越多,排名越靠前,如果题目数一样多的看用的时间。
时间的计算方法如下:
例如你A题用了20分钟AC,然后B题有用了30分钟AC(此时是比赛开始50分钟),又用了30分钟AC了C题,那么你的时间(penalty )是
20 + 50 + 80 = 150分钟
比赛中常用的算法有
1。动态规划
2。搜索
3。贪心
4。图论
5。组合数学
6。计算几何
7。数论
等
推荐到
http://acm.pku.e.cn
http://acm.zju.e.cn
http://acm.h.e.cn
http://acm.timus.ru
这几个OJ上练习
比较好的题目分类(POJ上的)
1。这个是我最喜欢的
初期:
一.基本算法:
(1)枚举. (poj1753,poj2965)(2008-10-27Done 位运算+宽搜)
(2)贪心(poj1328,poj2109,poj2586)
(3)递归和分治法.
(4)递推.
(5)构造法.(poj3295)
(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.图算法:
(1)图的深度优先遍历和广度优先遍历.
(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)(2008-08-29Done)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成树算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓扑排序 (poj1094)(2008-09-01Done)
(5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020)
(6)最大流的增广路算法(KM算法). (poj1459,poj3436)
三.数据结构.
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299)
(3)简单并查集的应用.
(4)哈希表和二分查找等高效查找法(数的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼树(poj3253)(2008-09-02Done)
(6)堆
(7)trie树(静态建树、动态建树) (poj2513)(2008-10-23Done 并查集、欧拉)
四.简单搜索
(1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.动态规划
(1)背包问题. (poj1837,poj1276)
(2)型如下表的简单DP(可参考lrj的书 page149):
1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)
六.数学
(1)组合数学:
1.加法原理和乘法原理.
2.排列组合.
3.递推关系.
(POJ3252,poj1850,poj1019,poj1942)
(2)数论.
1.素数与整除问题
2.进制位.
3.同余模运算.
(poj2635, poj3292,poj1845,poj2115)
(3)计算方法.
1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122)
七.计算几何学.
(1)几何公式.
(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039)
(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)(2008-08-29Done)
中级:
一.基本算法:
(1)C++的标准模版库的应用. (poj3096,poj3007)
(2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,poj1027,poj2706)
二.图算法:
(1)差分约束系统的建立和求解. (poj1201,poj2983)(2008-09-05Done)
(2)最小费用最大流(poj2516,poj2516,poj2195)
(3)双连通分量(poj2942)
(4)强连通分支及其缩点.(poj2186)
(5)图的割边和割点(poj3352)
(6)最小割模型、网络流规约(poj3308, )
三.数据结构.
(1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)静态二叉检索树. (poj2482,poj2352)
(3)树状树组(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)并查集的高级应用. (poj1703,2492)
(6)KMP算法. (poj1961,poj2406)(2008-09-16Done)
四.搜索
(1)最优化剪枝和可行性剪枝
(2)搜索的技巧和优化 (poj3411,poj1724)
(3)记忆化搜索(poj3373,poj1691)
五.动态规划
(1)较为复杂的动态规划(如动态规划解特别的施行商问题等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)记录状态的动态规划. (POJ3254,poj2411,poj1185)
(3)树型动态规划(poj2057,poj1947,poj2486,poj3140)
六.数学
(1)组合数学:
1.容斥原理.
2.抽屉原理.
3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026).
4.递推关系和母函数.
(2)数学.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.概率问题. (poj3071,poj3440)
3.GCD、扩展的欧几里德(中国剩余定理) (poj3101)
(3)计算方法.
1.0/1分数规划. (poj2976)
2.三分法求解单峰(单谷)的极值.
3.矩阵法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)随机化算法(poj3318,poj2454)
(5)杂题.
(poj1870,poj3296,poj3286,poj1095)
七.计算几何学.
(1)坐标离散化.
(2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多边形的内核(半平面交)(poj3130,poj3335)
(4)几何工具的综合应用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
高级:
一.基本算法要求:
(1)代码快速写成,精简但不失风格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保证正确性和高效性. poj3434
二.图算法:
(1)度限制最小生成树和第K最短路. (poj1639)
(2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最优比率生成树. (poj2728)
(4)最小树形图(poj3164)
(5)次小生成树.
(6)无向图、有向图的最小环
三.数据结构.
(1)trie图的建立和应用. (poj2778)(2008-10-26Done 矩阵A^n)
(2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和 在线算法
(RMQ+dfs)).(poj1330)
(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的
目的). (poj2823)
(4)左偏树(可合并堆).
(5)后缀树(非常有用的数据结构,也是赛区考题的热点).
(poj3415,poj3294)
四.搜索
(1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286)
五.动态规划
(1)需要用数据结构优化的动态规划.
(poj2754,poj3378,poj3017)
(2)四边形不等式理论.
(3)较难的状态DP(poj3133)
六.数学
(1)组合数学.
1.MoBius反演(poj2888,poj2154)
2.偏序关系理论.
(2)博奕论.
1.极大极小过程(poj3317,poj1085)
2.Nim问题.
七.计算几何学.
(1)半平面求交(poj3384,poj2540)
(2)可视图的建立(poj2966)
(3)点集最小圆覆盖.
(4)对踵点(poj2079)
八.综合题.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)
2。这个每个分类的题目比较多,适合作为第一个分类的扩展
说明:递推算动归, 离散化算数据结构, 并查集算数据结构, 博弈算动归, 麻烦题一般都是不错的综合题, 最短路算图论,数据的有序化算排序
麻烦题:1697, 1712, 1713, 1720, 1729, 1765, 1772, 1858, 1872, 1960, 1963, 2050, 2122, 2162, 2219, 2237,
简单题目:1000, 1003, 1004, 1005, 1007, 1046, 1207, 1226, 1401, 1504, 1552, 1607, 1657, 1658, 1674, 1799, 1862, 1906, 1922, 1929, 1931, 1969, 1976, 2000, 2005, 2017, 2027, 2070, 2101, 2105, 2109, 2116, 2136, 2160, 2190, 2232, 2234, 2275, 2301, 2350, 2363, 2389, 2393, 2413, 2419, 推荐:1063, 1064, 1131, 1140, 1715, 2163,
杂题:1014, 1218, 1316, 1455, 1517, 1547, 1580, 1604, 1663, 1678, 1749, 1804, 2013, 2014, 2056, 2059, 2100, 2188, 2189, 2218, 2229, 2249, 2290, 2302, 2304, 2309, 2313, 2316, 2323, 2326, 2368, 2369, 2371, 2402, 2405, 2407, 推荐:1146, 1147, 1148, 1171, 1389, 1433, 1468, 1519, 1631, 1646, 1672, 1681, 1700, 1701, 1705, 1728, 1735, 1736, 1752, 1754, 1755, 1769, 1781, 1787, 1796, 1797, 1833, 1844, 1882, 1933, 1941, 1978, 2128, 2166, 2328, 2383, 2420,
高精度:1001, 1220, 1405, 1503,
排序:1002, 1318, 1877, 1928, 1971, 1974, 1990, 2001, 2002, 2092, 2379, 2388, 2418, 推荐:1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376, 2377, 2380,
搜索容易:1128, 1166, 1176, 1231, 1256, 1270, 1321, 1543, 1606, 1664, 1731, 1742, 1745, 1847, 1915, 1950, 2038, 2157, 2182, 2183, 2381, 2386, 2426, 不易:1024, 1054, 1117, 1167, 1708, 1746, 1775, 1878, 1903, 1966, 2046, 2197, 2349, 推荐:1011, 1190, 1191, 1416, 1579, 1632, 1639, 1659, 1680, 1683, 1691, 1709, 1714, 1753, 1771, 1826, 1855, 1856, 1890, 1924, 1935, 1948, 1979, 1980, 2170, 2288, 2331, 2339, 2340,
数据结构容易:1182, 1656, 2021, 2023, 2051, 2153, 2227, 2236, 2247, 2352, 2395, 不易:1145, 1177, 1195, 1227, 1661, 1834, 推荐:1330, 1338, 1451, 1470, 1634, 1689, 1693, 1703, 1724, 1988, 2004, 2010, 2119, 2274,
动态规划容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029, 2033, 2063, 2081, 2082, 2181, 2184, 2192, 2231, 2279, 2329, 2336, 2346, 2353, 2355, 2356, 2385, 2392, 2424, 不易:1019, 1037, 1080, 1112, 1141, 1170, 1192, 1239, 1655, 1695, 1707, 1733, 1737, 1837, 1850, 1920, 1934, 1937, 1964, 2039, 2138, 2151, 2161, 2178, 推荐:1015, 1635, 1636, 1671, 1682, 1692, 1704, 1717, 1722, 1726, 1732, 1770, 1821, 1853, 1949, 2019, 2127, 2176, 2228, 2287, 2342, 2374, 2378, 2384, 2411,
字符串:1488, 1598, 1686, 1706, 1747, 1748, 1750, 1760, 1782, 1790, 1866, 1888, 1896, 1951, 2003, 2121, 2141, 2145, 2159, 2337, 2359, 2372, 2406, 2408,
贪心:1042, 1065, 1230, 1323, 1477, 1716, 1784,
图论容易:1161, 1164, 1258, 1175, 1308, 1364, 1776, 1789, 1861, 1939, 1940, 1943, 2075, 2139, 2387, 2394, 2421, 不易:1041, 1062, 1158, 1172, 1201, 1275, 1718, 1734, 1751, 1904, 1932, 2173, 2175, 2296, 网络流:1087, 1273, 1698, 1815, 2195, 匹配:1274, 1422, 1469, 1719, 2060, 2239, Euler:1237, 1637, 1394, 2230, 推荐:2049, 2186,
计算几何容易:1319, 1654, 1673, 1675, 1836, 2074, 2137, 2318, 不易:1685, 1687, 1696, 1873, 1901, 2172, 2333, 凸包:1113, 1228, 1794, 2007, 2187,
模拟容易:1006, 1008, 1013, 1016, 1017, 1169, 1298, 1326, 1350, 1363, 1676, 1786, 1791, 1835, 1970, 2317, 2325, 2390, 不易:1012, 1082, 1099, 1114, 1642, 1677, 1684, 1886,
数学容易:1061, 1091, 1142, 1289, 1305, 1306, 1320, 1565, 1665, 1666, 1730, 1894, 1914, 2006, 2042, 2142, 2158, 2174, 2262, 2305, 2321, 2348, 不易:1067, 1183, 1430, 1759, 1868, 1942, 2167, 2171, 2327, 推荐:1423, 1450, 1640, 1702, 1710, 1721, 1761, 1830, 1930, 2140,
‘肆’ 如何提高口算速度,求一些口算的高等技巧,加减和乘除都要,打算举行一个大学生口算比赛
一、20以内加减法的口算
1、加法
20以内进位加法思维训练的方法很多:有点数法、接数法、凑十法,口决法,推导法、减补法等。要根据学生所处的文化环境、家庭背景和自身思维的不同,由学生自己动手实践、自主探索与合作交流来实现。这里重点介绍:减补法。
我们规定:两个可以凑成10的数是互为补数,1和9,2和8,3和7等。都是互为补数。
方法是:用第一个加数减去第二个加数的补数,再加上10 。比如:
9+4=13
思考方法:第二个加数的补数是6;第一个加数9减去4的补数6得3;3加上10,得13。 即 9+4 = 9 - 6+10 = 3+10 = 13
这样的思考途径,对于培养学生的逆向思维能力很有好处,但只能符合思维能力强的学生。教师可以根据情况引导。
2、减法
20以内退位减法是以20以内加法为基础的,方法有:想加法计算减法、破十法、分解减法后连减法、记小数数到大数、推导法、加补法等。这里重点介绍加补法:
方法是:用被减数个位上的数加上减数的补数,同时去掉十位上的“1”,比如:被减数
13 - 4 = 9
思维方法:被减数个位上的3不够减;减数4的补数是6;6加上被减数个位上的3,得9,同时去掉十位上的“1”。
二、两位数加减法口算:
两位数加减法这里重点介绍减补法和加补法,首先我们规定:两个和为100的数互为百补数。
1、加法
两位数加法有四种现象,即个位、十位都不进位的;个位进位十位不进位的;十位进位个位不进位的;个位十位都进位的。下面分别介绍:
(1)、个位十位都不进位的两位数加法,用数的组成法直接相加。
例:34 + 52 = 30 + 50 + 4 + 2 = 86
(2)个位进位十位不进位的两位数加法,思维方法是:
一个加数十位上的数字加上另一个加数十位上的数字再加“1”,得十位上的数字,个位用一个加数个位上的数字减去另一个加数个位上数字的百补数,得个位上的数字。
例:36+ 47 = 83
口算过程:十位上的数字是3 + 4 + 1=8
个位上的数字是6 - 3(3是7的十补数)=3
或 7 - 4(4是6的十补数)=3
所以:36+47十位数字是8,个位数字是3,等于83。
(3)十位进位个位不进位的两位数加法,思维方法是:
首先确定“百”位数字是“1”,然后用一个加数十位上的数字减去另一个加数十位上数字的十补数,得十位上的数字,个位上的数用数的组成法直接相加。
例:83 + 64 = 147
口算过程:百位是“1”.
十位数字是 8 - 4 = 4 或 6 - 2 = 4.
个位是 3 +4 = 7.
所以:83 + 64百位数字是1,十位数字是4,个位数字是7,等于147
(4)个位十位都进位的两位数加法,思维方法是:
首先确定百位数字是“1”,然后用一个加数减去另一个加数的百补数,得十位和个位上的数字。
例:86 + 59= 145
口算过程:百位是“1”.
十位和个位上的数字用 86 - 41(59的百补数)=45
或 59 - 14(86的百补数) =45.
所以:86+59百位是1,十位和个位是45,等于145.
2、退位减法
两位数减法我们重点探讨退位减法。
(1)两位数减两位数, 思维方法是:
首先用被减数十位数字减去减数十位数字再减“1”,是差的十位数字,然后用被减数个位数字加上减数个位数字的十补数,是差的个位数字。
例:83 - 26 = 57
口算过程:十位数字是 8 - 2 -1= 5
个位数字是 3+4(4是6的十补数)=7
所以 83-26十位数字是5,个位数字是7,等于57.
(2)被减数是一百几十的退位减法,思维方法是:
首先确定百位是1-1=0 即这个数的差是几十几,然后用被减数十位和个位的数字加上减数十位和个位数字的百补数,就是差。
例132 - 67 = 65
口算过程:32+33(33是67的百补数)=65.
三、两位数乘法口算
一位数乘法口算就是口诀表,在讲清算理的基础上要求背会。这里重点介绍几种两位数乘法的特殊算法。
1、两个相同因数积的口算法;(平方口算法)
(1)、基本数与差数之和口算法:
基本数:这个数各位分别平方后,组成一个新的数称基本数。十位平方为基本数百位以上的数,个位平方为基本数十位和个位数,十位无数用零占位。
差数:这个数十位和个位的积再乘20称差数。
基本数 + 差数 = 这两个相同因数的积。
例1、13×13
基本数:百位:1×1=1
十位:用0占位
个位:3×3=9
所以基本数就是 109
差数:1×3×20=60
基本数 + 差数 = 109 + 60 = 169
所以13×13=169
例2、67×67
基本数:百位以上数字是 6×6=36
十位和个位数字是7×7=49
所以基本数是 3649
差数:6×7×20=840
基本数+差数=3649+840=4489
所以:67×67 = 4489
(2)三步到位法
思维过程:
第一步:把这个数个位平方。得出的数,个位作为积的个位,十位保留。
第二步:把这个数个位和十位相乘,再乘2,然后加上第一步保留的数,所得的数的个位就是积的十位数,十位保留。
第三步:把这个数十位平方,加上第二步保留的数,就是积的百位、千位数。
例1、24×24
第一步:4×4=16 “1”保留,“6”就是积的个位数。
第二步:4×2×2+1=17 “1”保留,“7”就是积的十位数。
第三步 :2×2+1=5 “ 5”就是积的百位数.
所以24×24=576
例二、37×37
第一步:7×7=49 "4"保留,"9",就是积的个位数。
第二步:3×7×2+4=46 "4"保留,"6",就是积的十位数。
第三步 :3×3+4=13 "13"就是积的百位和千位数字。
所以:37×37=1369
(3)、接近50两个相同因数积的口算
思维方法:比50大的两个相同数的积等于5乘5加上个位数字,再添上个位数字的平方,(必须占两位,十位无数用零占位):比50小的两个相同数的积,等于5乘5减去个位数字的十补数,再添上个位数字十补数的平方(必须占两位,十位无数用零占位)。
例1、53×53
5×5+3=28 再添上3×3=9 (必须两位09) 等于2809
所以:53×53=2809
例2、58×58
5×5+8=33 再添上8×8=64 等于3364
所以:58×58=3364
例3、47×47
5×5-3(3是7的十补数)=22 再添上3×3=9 (必须两位09)
等于2209
所以:47×47=2209
(4)、末位是5的两个相同因数积的口算
思维方法:设这个数的十位数字为K,则这两个相同因数的积就是:K×(K+1)再添上5×5=25 或者 K×(K+1)×100+25
例 1、 35×35=3×(4+1)×100+25=1225
例2、75×75=7×(7+1)×100+25=5625
两个相同因数积的口算方法很多,这里就不一一介绍了。我们利用两个相同因数积的口算方法可以口算好多相近的两个数的积。举例如下:
例1、13×14
因为:13×13=169 再加13得182 所以 :13×14=182
或者14×14 因为:14×14=196 再减14 还得182
例2、35×37
因为:35×35=1225 再加70(2×35)得1295
所以 35×37=1295
2、首尾有规律的数的口算
(1)首同尾合十(首同尾补)
思维方法:首数加“1”乘以首数,右边添上尾数的积(两位数),如积是一位数,十位用零占位。
例:76×74=(7+1)×7×100+6×4=5624
(2)尾同首合十(尾同首补)
思维方法:首数相乘加尾数,右边添上尾数的平方(两位数),如积是一位数,十位用零占位。
例:76×36=(7×3+6)×100+6×6=2736
(3)一同一合十(一个数两位数字相同,一个数两位数字互补)
思维方法:两个数的十位数字相乘,再加上相同数字,右边添上两尾数的积。如积是一位数,十位用零占位。
例:33×64=(3×6+3)×100+3×4=2112
以上三种方法,可以用一个公式计算即:
(头×头+同)×100 + 尾×尾
3、利用特殊数字相乘口算
有些数字很特殊,它们的积是有规律的。
(1)7乘3的倍数或3乘7的倍数
先看看下面的几个式子:
7×3=21 7×6=42 7×9=63
7×12=84 7×15=105 7×18=126......7×27=189
我们观察这几个式子被乘数都是7,乘数是3的倍数.是3的几倍,积的个位就是几,积的十位或者十位以上的数字始终是个位的2倍.
因此,我们可以说:7乘3的倍数,等于该倍数加该倍数的20倍.
果我们设这个倍数为N,用公式表示:7×3N=N+20N(N>0的正整如数)
例1、7×27=7×3×9=9+20×9=189
例2、7×57=7×3×19=19+20×19=398
这个结论3乘7的倍数也适用.我们用这个结论可以口算3的倍数和7的倍数的两个数相乘.
例3、14×15=7×2×3×5=7×3×10=10+20×10=210
例4、28×36=7×4×3×12=7×3×48=48+20×48=1008
(2)、17乘3的倍数或3乘17的倍数
17乘3的倍数,等于该倍数加该倍数的50倍.(3乘17的倍数也适用)
如果我们设这个倍数为N,用公式表示:17×3N=N+50N(N>0的正整数)
例1、17×21=17×3×7=7+50×7=357
例2、17×84=17×3×28=28+50×28=1428
例3、34×24=17×2×3×8=17×3×16=16+50×16=816
(3)、17乘13的倍数或13乘17的倍数
17乘13的倍数等于该倍数加该倍数的20倍,再加200倍。
如果我们设这个倍数为N,用公式表示:17×13N=N+20N+200N(N>0的正整数)
例1、17×78=17×13×6=6+20×6+200×6=1326
例2、34×65=17×2×13×5=17×13×10=10+20×10+200×10
=2210
例3、34×78=17×2×13×6=17×13×12=12+20×12+200×12
=2652
(4)43乘7的倍数或7乘43的倍数
43乘7的倍数等于该倍数加该倍数的300倍。
如果我们设这个倍数为N,用公式表示:43×7N=N+300N(N>0的正整数)
例1、43×28=43×7×4=4+300×4=1204
例2、43×84=43×7×12=12+300×12=3612
4、两个接近100的数相乘的口算
(1)超过100的两个数相乘
思维方法:先把一个因数加上另一个因数与100的差,然后在所得的结果后面添上两个因数分别与100之差的积。
例1、103×104=(103+4)×100+3×4=10712
例2、112×107=(112+7)×100+12×7=11984
(2)不足100的两个数相乘
思维方法:先从一个因数中减去另一个因数与100的差,然后在所得的结果后面添上两个因数分别与100之差的积。
例1、92×94=(92-6)×100+8×6=8648
或者:92×94=(94-8)×100+8×6=8648
(3)一个超过100,一个不足100的两个数相乘
思维方法:超过100的数减不足100的差,扩大100倍后,减去两个因数分别与100之差的积。
例1、104×97=(104-3)×100-4×3=10100-12=10088
口算的技巧太多了。以上仅介绍了部分特殊口算技巧,还有利用运算定律和运算性质可以口算;利用凑整法可以口算等等。要求我们教师要熟记和掌握这些方法,关键只有一种:最终近快的准确的口算出结果。
基本口算要熟练。20以内进位加减法和退位减法及表内乘除法必须达到“脱口而出”的熟练程度。因为任何一道四则计算题,都是一系列口算的综合,如果其中有一步口算失误,就会前功尽弃。口算的准确和熟练程度直接制约着计算能力的培养和提高。
常用数据要熟记。计算中的常用数据如果能在理解的基础上熟记,可以大大提高计算的准确性和速度。如4×25=100、4×75=300、8×125=1000、1÷2=0.5、1÷4=0.25、3÷4=0.75、1÷8=0.125(12.5%)等。
简便口算要自觉。利用数字特征和运算关系,应用运算定律或性质自觉地进行简便计算,有利于培养学生思维的灵活性和敏捷性。如389+298、654-496可以利用和、差的规律进行简算。389+298=389+300-2=689-2=687,654-496=654-500+4=154+4=158,多加几就减去几;多减几就加上几。312×25、2700÷125可以利用积、商变化的规律进行简算。312×25=(312÷4)×(25×4)=78×100=7800,2700÷125=(2700×8)÷(125×8)=21600÷1000=21.6
练习口算要经常。口算的练习应贯穿于教学活动的全过程,要围绕教学内容,有针对性。有目的性低进行。新授前练口算,“温故知新”起到迁移的作用。新授中练口算,有利用新知的巩固。新授后练口算,有利于形成良好的认知结构,能使学生自觉地应用运算定律或运算性质,改变原有的运算顺序,使计算简便。
口算技能要培养。在理解算理的基础上掌握口算方法,是学习口算的第一步,也是重要的一步,但到了一定程度,就要简化、压缩思维过程,形成口算的技能、技巧。如有些同级算的式题,36÷7×14, 72×18÷24从表面来看无法口算,根据运算定律或预算性质,进行合理的调整以后,就可以进行口算。36÷7×14=36×(14÷7)=36×2=72,72×18÷24=72÷24×18=3×18=54.或者改变一下运算的形式:36÷7×14=36×1÷7×14,72×18÷24=72×18×1÷24,在运算时,还可以把一些数拆成两数的和、两数的差、两数的积或商,使计算简便。
‘伍’ 计算机经典算法——锦标赛排序算法
关键词 :二叉树
生活中的淘汰锦标赛 :在单淘汰的锦标赛中,选手们两两比赛,胜者晋级,败者被淘汰。比如世界乒乓球锦标赛或者大满贯网球赛就是这么进行的。
这样一来,就可以把比赛的赛程和结果对应成一个二叉树。在树中每一个选手是二叉树中的一个叶子结点,每一场比赛就相当于两个数字在比大小,数字大的选手获胜进入下一轮,成为树干上的根。所以,进入到某一轮比赛的选手,其实都是某个子数干的根结点。最后的冠军就是整个二叉树的根结点。这种赛制的合理性需要一个假设:A>B, B>C --> 必然有A>C(输赢的传递性)
工程中,要比较两个数字的大小
第一步:把所有的数字放到二叉树的叶子节点,然后按照锦标赛单淘汰的方式,两两比较选出最大
第二步:对于第二大的,从所有被最大的数字淘汰的数字中选择,以此类推选择对于第三、第四大的数字
假定有25名短跑选手比赛竞争金银铜牌,赛场上有5条赛道,因此一次可以有5个人同时比赛。比赛不及时,只看相应的名次。假如选手的发挥是稳定的,也就是说如果约翰比张三跑的快,张三比凯利跑的快,那么约翰一定比凯利跑得快。最少需要几组比赛才能决出前3名?
第一步,将25名选手分成5组,每组5人。让每个组分别比赛,排出各组的名次来,假设他们的名字就是他们在小组中的编号。
第二步,让各组的第一名,也就是A1、B1、C1、D1、E1再比一次。假设A1在这次比赛中获胜,这样我们就知道了第一名。
第四步,如上图通过8次(5 +1 + 1 +1)选出的5人进行第三名的比赛,前3全部产生
更好的答案:
前6次比赛都是必须的,最佳答案的前2步和上述方案中的前2步是相同的。在第6组比赛(即5个第一名的比赛)结束之后,最后的2名已经没有资格角逐前3名了。
不妨假设那一次比赛从最快到最慢的结果是A1、B1、C1、D1、E1,在D1和E1之前已经有3名选手了,他们肯定不是前3名。
谁还会是第二名的候选呢?根据锦标赛排序的原则,直接输给第一名的人,也就是A2,以及最后附加赛输给他的B1,仅此两人而已。
谁会是第三名的候选呢?和A1在某一组比赛的第三名,他们是A3、C1,或者输给第二名候选人B1的人,即B2。
因此,第二、第三名的候选人一共只有5个, A2、A3、B1、B2和C1,刚好凑一组。这样加上前6次,只需要赛7组,这是最佳方法。
注:来自吴军老师得到课程
‘陆’ 少儿编程有哪些比赛要怎样报名
Scratch语言:
1、全国青少年创意编程与智能设计大赛。
2、谷歌全国中小学生计算思维编程挑战赛。
3、全国中小学生电脑制作大赛。
程序开发路线图:
scratch 1.4、scratch 2.0、Scratch 3.0软件分别是用Smalltalk、flash、html5开发的。关于这个程序语言的详细介绍只有英文的内容。
作为“OLPC(One Laptop per Child,每个孩子都有一台电脑)”项目的一部分,Smalltalk提出一个建议的语言学习顺序,其中的每种语言都被设计成下一种的入门和基础。这个顺序是:Scratch-Etoys-Squeak-任意Smalltalk。在学习的过程中,每一种语言都提供了图形化的编程环境。
以上内容参考网络——Scratch,网络——儿童编程