剪绳子2

题目描述
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1
示例 2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

提示:

2 <= n <= 1000

方法一:使用数学推导,具体来说不属于算法,下次更新动态规划算法
同时和一的区别是有大数,需要考虑是否会溢出,所以使用循环求余,保证结果正确

提交结果
在这里插入图片描述

方法一

package main

import (
	"fmt"
)

func main() {
	fmt.Println(cuttingRope(120))
}
func cuttingRope(n int) int {
	if n == 2 || n == 3 {
		return n - 1
	} else if n%3 == 0 {
		return qq(3, n/3)
	} else if n%3 == 1 {
		return qq(3, n/3-1) * 2 % 1000000007 * 2 % 1000000007
	} else if n%3 == 2 {
		return qq(3, n/3) * 2 % 1000000007
	}
	return 0
}
func qq(x, n int) int {
	r := 1
	for i := 0; i < n; i++ {
		r = r * x % 1000000007
	}
	return r
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

s': // 地球向下移动 earth_pos[1] -= 0.1; break; } } // 定时器事件处理函数 void timer(int value) { update(); glutTimerFunc(20, timer, 0); } 割绳子是一款非常流行的益智游戏,它的核心玩法是通过切割绳子来// 主函数 int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT让物体掉落到指定位置,同时需要收集星星来获取更高的分数。在 Cocos Creator 中_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("Earth and Moon"); glut实现割绳子的过程大致可以分为以下几个步骤: 1. 创建游戏场景和物体DisplayFunc(display); glutMouseFunc(mouse); glutKeyboardFunc(keyboard); glutTimerFunc(20, timer, 0); :使用 Cocos Creator 的场景编辑器创建游戏场景,然后添加需要切割的绳子和物体等 init(); glutMainLoop(); return 0; } ``` 这个程序使用了OpenGL库,实现了一个简游戏元素。 2. 实现物体的掉落:使用物理引擎(如 Cocos Creator 自带的 Box单的地月绕太阳公转的效果。其中地球和月球是用图素构造法构成的2D 物理引擎)来实现物体的掉落,同时设置物体的刚体属性、碰撞体属性三维球体,太阳是一个实心球体。程序支持鼠标左键点击开始运动,支持键等。 3. 实现绳子的切割:在游戏场景中添加触摸事件监听器,当玩家触盘控制地球改变轨道。此外,地球和月球还添加了phong光照效果,增摸到绳子时,计算出触摸点与绳子的交点,并将绳子分成两段。可以使用强了真实感。 程序中使用了三个数组分别存储地球和月球的位置和速度,每 Cocos Creator 自带的 Graphics 组件来绘制切割后的绳子。 4. 实现星星的收集:在次更新时根据万有引力定律计算它们的位置和速度。鼠标事件处理函数中实现游戏场景中添加触发器,当物体与星星重叠时,触发收集星星的事件,并了视角的变换,键盘事件处理函数中实现了地球的移动。定时器事件处理函数中更新分数。 5. 实现游戏结束逻辑:当物体掉落到指定位置或者掉落到屏不断更新地球和月球的位置和速度,并进行重绘。 希望这个示范程序对你有所帮助。如果还有疑问,可以继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值