摘要:【例1】递归三角形图案。 输入一个正整数n(n<=7),按图1的示例输出相应的由星号组成的三角形图案。 图1 n分别为2、3、4、5的三角形图案 (1)编程思路。 根据题目示例可知,度数为n的三角形图案,将占2n-1行2n-1列,可以用一个二维字符数组来存储图形中各个字符,因为n<=7,而26=64
阅读全文
摘要:排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。 排列与组合在日常生活中应用较广,比如在考虑某些事物在某种情况下出现的次数时,往往需要用到排列和组合。 【例1】取值组合。 有一个集合拥有m个元
阅读全文
摘要:排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。 排列与组合在日常生活中应用较广,比如在考虑某些事物在某种情况下出现的次数时,往往需要用到排列和组合。 【例1】n位二进制数的全排列。 编写一个
阅读全文
摘要:【例1】求正整数的拆分数。 将正整数s表示成一系列正整数之和,s=n1+n2+…+nk,其中n1>=n2>=…>=nk, k>=1。正整数s的不同拆分个数称为s的拆分数。例如,正整数6有11种不同的拆分,分别是: 6; 5+1; 4+2; 4+1+1; 3+3; 3+2+1; 3+1+1+1; 2+
阅读全文
摘要:递归是算法设计中的一种基本而重要的算法。递归方法通过函数调用自身将问题转化为本质相同但规模较小的子问题,是分治策略的具体体现。 递归算法的定义:如果一个对象的描述中包含它本身,我们就称这个对象是递归的,这种用递归来描述的算法称为递归算法。 先来看看大家熟知的一个的故事: 从前有座山,山上有座庙,庙里
阅读全文
摘要:迭代是一种不断用变量的旧值推出新值的过程。例如,程序设计中常用到的计数cnt=cnt+1(或cnt++),就是用变量cnt的值加上1后赋值给cnt;对k的求和s=s+k,就是用变量s的值加上k后赋值给s。这种用变量cnt、s的新值取代旧值的过程,实际上就是迭代。 递推实际上也是根据递推关系式不断推出
阅读全文
摘要:迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行: (1)选一个方程的近似根,赋给变量x0。 (2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0。 (3)当x0与x1的差的绝对值还小于指
阅读全文
摘要:迭代法也称辗转法,是一种不断用变量的旧值推出新值的过程。它是解决问题的一种基本方法,通过让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 迭代算法的基本思想是:为求一个问题的解x,可由给定的一个初值x0,根据某一迭代公式得到一个新的值
阅读全文
摘要:【例9】放苹果(POJ 1664) Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 Input 第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分
阅读全文
摘要:下面通过一些典型实例及其扩展来讨论递推法的应用。 【例2】骨牌铺方格 在2×n的一个长方形方格中,用一种2×1的骨牌铺满方格。输入n(n<=40),输出铺放方案的总数。 例如n=3时,为2×3方格,骨牌的铺放方案有三种,如下图1所示。 图1 2×3方格的骨牌铺放方案 (1)编程思路。 设f[i]为铺
阅读全文
摘要:所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。 利用递推算法求问题规模为n的解的基本思想是:当n=1时,解或为已知,或能非常方便地求得;通过采用递推法构造算法的递推性质,能从已求得的规模
阅读全文
摘要:下面给出两道POJ上的问题,看如何用穷举法解决。 【例9】Calling Extraterrestrial Intelligence Again(POJ 1411) Description A message from humans to extraterrestrial intelligence
阅读全文
摘要:有些问题没有明确的区间限制,可根据问题的具体实际进行建模分析,再确定穷举对象及范围进行穷举。 【例7】质数幻方 通常的n阶幻方是由1,2,…,n2构成的各行、各列与两对角线之和均相等n行n列方阵。质数幻方则全是由质数构成的各行、各列与两对角线之和均相等的方阵。 例如: 17 113 47 89 59
阅读全文
摘要:在采用穷举法解决问题时,大多数时候可以确定穷举的范围,即待解决问题有明确的区间限制,可以采用循环在这个指定的范围内搜索满足约束条件的解。 【例2】数字方格 有3个方格,每个方格里面都有一个整数a1,a2,a3。已知0<=a1,a2,a3<=n,而且a1+a2是2的倍数,a2+a3是3的倍数,a1+a
阅读全文
摘要:穷举是用计算机求解问题最常用的方法之一,常用来解决那些通过公式推导、规则演绎的方法不能解决的问题。采用穷举法求解一个问题时,通常先建立一个数学模型,包括一组变量、以及这些变量需要满足的条件。问题求解的目标就是确定这些变量的值。根据问题的描述和相关的知识,能为这些变量分别确定一个大概的取值范围。在这个
阅读全文
摘要:POJ中有些问题给出了一个长数字序列(即序列中的数字非常多),这个长数字序列的生成有一定的规律,要求求出这个长数字序列中某个位上的数字是多少。这种问题通过分析,找出规律就容易解决。 例如,N!是一个非常大的数,其末尾有很多个0,如何求得其最后一个非零的数字? N!的最后一个非零的数字 N!的最后一个
阅读全文
摘要:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 最小的质数是2。 【例1】Goldbach's Conjecture (POJ 2262) Description In
阅读全文
摘要:POJ在评阅习题时需要向程序提供输入数据,并获取程序的输出结果。因此提交的程序需按照每个习题具体的输入输出格式要求处理输入输出。有的时候,测评系统给出程序的评判结果是“数据错误”或“结果错误”,有可能就与没有正确使用输入输出格式有关。 POJ要求的输出一般有3种情况。 (1)输出一个数据:数据后加换
阅读全文
摘要:Online Judge系统 Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交给定问题的多种程序(如C、C++、Pascal、Java)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系
阅读全文
摘要:1.清除空格 编写一个程序,把字符串中的每个空格清除掉。例如输入“We are happy.”,则输出“Wearehappy.”。 编程思路 由于字符串的内存分配方式是连续分配的。我们从字符串当中删除一个空格字符时,需要把后面所有的字符往前移动一个字节的位置。但如果每次删除都需要移动字符串后面的字符
阅读全文
摘要:由n*n个数字所组成的n阶方阵,若具有各对角线、各横列与纵行的数字和都相等的性质,则称为魔方阵。这个相等的和称为魔术数字。若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵。 如下所示为一个3阶魔方阵和一个四阶魔方阵。 魔方阵的构建方法很多,一般将n分为三类,这三类n构成的魔方阵的算法各不相同
阅读全文
摘要:将下面的程序补充完整,以完成指定的功能。 1.输入10个整数,找出最大数。 #include <iostream> using namespace std; int main() { int k,x,max; cin>>x; max=______; // (1) for (k=2; k<=___ ;
阅读全文
摘要:1.尼科彻斯定理 This program is to verify Theorem of Nicoqish.That is the cube of any integer can be represented as the sum of some continue odd numbers.For
阅读全文
摘要:【例1】循环左移1位 输入10个整数到数组a中,将数组各元素依次循环左移一个位置(如下图1),输出移动后的数组a。 图1 数组元素循环左移1位 编程思路 先将a[0]保存起来(t=a[0]),再用一个循环将a[1]~a[9]依次前移一位,最后将预存起来的a[0]送至a[9]即可。 源程序及运行结果
阅读全文
摘要:程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计是一门实践性很强的课程,通过实践锻炼出的程序设计能力将直接关系到人们的软件开发能力。本篇文章通过对水仙花数问题的不断扩展,来讨论程序设计能力的培养方法。 1.1 水仙花数的连营 1.1.1 水仙花数 在学习程序设计课程时,
阅读全文