你站在一段楼梯面前,陷入了沉思,你每次可以跨两级,或者跨一级,问你走到最后一级台阶一共有多少种不同的走法。
输入一个整数n,表示台阶的数量
这道题的其实一眼就看出是斐波那契数列,开long long勉强可以装的下。所以是一道递归的题。但是其中的原理是什么呢?在博主看来,是极简单的动态规划(DP)。其中,a[i]表示到第i级台阶的方案总数。根据题意,动态转移方程式是:a[i]=a[i-1]+a[i-2] (i>2),答案为a[n]。代码如下:
小C来到了繁华的曼哈顿,想去参观大都会艺术博物馆!
曼哈顿的道路可以看做是与x轴或y轴垂直的直线,小C位于(a,b),而目的地位于(c,d),问最少几步可以到达。
输出这两个点的曼哈顿距离。
一条直线,若规定了它的原点、正方向和单位长度,就可称之为数轴。两条互相垂直的数轴,移动它们的原点,直到两原点重合,就形成了一个平面直角坐标系(如图所示)。
如图,两个重合的原点被称为该坐标系的原点,一般我们规定一个平面直角坐标系由一根铅直的数轴和水平的数轴组成,铅直的数轴一般叫“y轴”,水平的数轴一般叫“x轴”。在实际应用中,可以调整两轴的正方向。
若x轴的正方向朝右,y轴的正方向朝上,则右上角的区域叫“第一象限”,左上角的区域叫“第二象限”,左下角的区域叫“第三象限”,左上角的区域叫“第四象限”。四个象限按一-->二-->三-->四的顺序成逆时针排序。规定两坐标轴不属于任何象限。
平面直角坐标系中,过一个点作x轴和y轴的平行线(若其在x轴或y轴上,则无需作该轴的平行线),将其看做数轴(原点相应地平移),则该点在平行于x轴上的对应点表示的数字叫做这个点的横坐标,在平行于y轴上的对应点表示的数字叫做这个点的纵坐标。该点在直角坐标系中的位置标示为“(横坐标,纵坐标)”。
设数轴上有、两点,分别表示数、。若,显然,两点的距离为0;若,则两点的距离为;若,则两点的距离为。注意到距离总是非负数,因此、两点的距离可用公式表示。
在C++中,可用abs(x)求数x的绝对值。
数轴上两点的距离公式用在曼哈顿距离上,就是:
(1)先输入两点的坐标和;
(2)先求横坐标的距离,为;
(3)再求纵坐标的距离,为;
(4)把两式相加(即),求得结果。
他在平面上找到两个点。 请求出它们之间的切比雪夫距离。
切比雪夫距离被定义为该点与 X 轴和 Y 轴坐标差的绝对值中较大的一个。
输出这两点的切比雪夫距离。
在C++中,可用max(x,y)求两数x,y中较大的那个(两数相等则返回这个相等的数)。
综合使用max(x,y)与abs(x),直接根据题意求出结果。
输入一个整数, 求它的平方根,输出答案向下取整.
浮点数有float与double两种,double的精确度比float高。其运算规则与int类型基本相同。
用sqrt(x)可求一个数x的平方根的精确值(即double类型的数)。
用floor(x)可求不大于一个数x的最大整数。
给出一个直角三角形的两条直角边,问斜边长度。保证三条边长都为整数。
一行两个不超过1000的正整数,表示直角三角形的两直角边长度。
一行一个整数,表示直角三角形的斜边长度。
如图,设直角三角形的两条直角边为和,斜边为,则三角形的面积。
把四个这样的直角三角形拼成左图,则显然区域是一个正方形,。则大正方形的面积为(设,若,则):
又因为斜边为,因此大正方形的面积也可表示为。于是。
由此,我们得出:在直角三角形中,直角边长的平方和等于斜边的平方。
也即:(设两直角边分别为、,斜边为)。
有时,我们会遇到明明需要int类型的数,可出来的却是个double类型的数。这时就需要强制把double类型的数转换成int类型的数。
可用下列两种方式来转换:
对于int类型的数,还可使用该数与double类型的数进行运算,即可转换成double类型。如:
当然,上面y=(int)x只能用于直接转换,下列代码:
就可能会出错。因为(int)x只是把x变成了int类型,再加一个double类型的数,反而会将其变回double类型。
要注意的是,如果要求int类型数除法的精确值,需将其转为double类型。
知道勾股定理后,直接应用即可。因为题中说“保证三条边长都为整数”,所以可以运用强制类型转换把double类型换成int类型。
将一个整数,四舍五入到十位
不可以使用系统已有的函数比如 round 等。
C++中的条件判断可用if语句实现,格式如下:
这时,只有当条件满足时,里面的代码才会被执行。
这时,当条件满足时,代码1被执行。不满足时,代码2被执行。
布尔值用来表示一个语句的真假,只有true和false两个值,true表示真,false表示假。
定义布尔类型变量的语句如下:
对于int与double类型的数,可以用比较操作符进行大小比较,常用的有:
意义(返回true的情况) |
左边的数大于或等于右边的数 |
左边的数小于或等于右边的数 |
可以用if-else语句模拟四舍五入到十位的过程(若个位小于5,则不进位;否则进位)。
相信大家一定听过大力水手波派的故事。每当危急关头,波派就会拿出他的秘密武器——菠菜!吃了菠菜的波派会变得力大无穷,天下无敌!(波派每吃1g菠菜,就能增长1kg的力气。)
有一天,五个不同国家的大力士同时向波派发出了挑战书。由于五个国家之间路途遥远,波派决定挑选一个最强的对手,去往他所在的国家迎接挑战!在收拾行囊时,波派犯了难,请问他应该准备至少多少克的菠菜,才能保证他一定能击败对手?(规定1、波派初始力气一定小于力气最大的大力士;2、只有力气比对手大,才算击败;3、力气为整数)
6个整数a,b,c,d,e,f,分别表示波派和五名大力士的力气,单位为千克。
一个整数,表示波派要带的菠菜,单位为克。
连续使用max(x,y)求出后,减去再加上1(因为要使波派的力气大于剩下五个人的力气)即可求出结果。
版权声明:本文为博主原创文章,遵循 版权协议,转载请附上原文出处链接和本声明。
你站在一段楼梯面前,陷入了沉思,你每次可以跨两级,或者跨一级,问你走到最后一级台阶一共有多少种不同的走法。
输入一个整数n,表示台阶的数量
这道题的其实一眼就看出是斐波那契数列,开long long勉强可以装的下。所以是一道递归的题。但是其中的原理是什么呢?在博主看来,是极简单的动态规划(DP)。其中,a[i]表示到第i级台阶的方案总数。根据题意,动态转移方程式是:a[i]=a[i-1]+a[i-2] (i>2),答案为a[n]。代码如下: