当前位置: 首页 > wzjs >正文

杭州人才网东莞seo

杭州人才网,东莞seo,wordpress08影视,品牌营销经典案例1.数的划分 题目描述 将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n7,k3n7,k3,下面三种分法被认为是相同的。 1,1,5;1,5,…

1.数的划分

题目描述

将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同(不考虑顺序)。

例如:n=7,k=3n=7,k=3,下面三种分法被认为是相同的。

1,1,5;1,5,1;5,1,1;1,1,5;1,5,1;5,1,1;

问有多少种不同的分法。

输入描述

输入一行,22 个整数 n,k (6≤n≤200,2≤k≤6)n,k (6≤n≤200,2≤k≤6)。

输出描述

输出一个整数,即不同的分法。

输入输出样例

示例 1

输入

7 3

输出

4

递归解题思路

看到“整数分拆”问题,直接想到“递归”

递归的核心思想:将大问题分解为小问题,通过解决小问题来构建大问题的解。

递归的终止条件:

  1. nm 为 0,或者 n 小于 m 时,分拆方式数量为 0。

  2. m 为 1 或 n 等于 m 时,分拆方式数量为 1。

递归的分解逻辑:

  1. 不选1的情况:将每个数字减去1,问题转化为 f(n - m, m)

  2. 选1的情况:其中一个数字是1,问题转化为 f(n - 1, m - 1)

最终结果是两种情况的和:f(n - m, m) + f(n - 1, m - 1)

解题步骤模板:

public static int f(int n, int m) {// 边界条件if (n == 0 || m == 0 || n < m) {return 0;}if (m == 1 || n == m) {return 1;}// 递归逻辑else {return f(n - m, m) + f(n - 1, m - 1);}
}

示例代码模板:

import java.util.Scanner;public class Main {// 递归函数,用于计算将整数 n 分成 m 份的方式数public static int f(int n, int m) {// 边界条件:当 n 或 m 为 0,或者 n 小于 m 时,分拆方式数量为 0if (n == 0 || m == 0 || n < m) {return 0;}// 当 m 为 1 或 n 等于 m 时,分拆方式数量为 1if (m == 1 || n == m) {return 1;}// 递归逻辑:// 1. 不选1的情况:将每个数字减去1,问题转化为 f(n - m, m)// 2. 选1的情况:其中一个数字是1,问题转化为 f(n - 1, m - 1)// 总分拆方式数量为两者的和else {return f(n - m, m) + f(n - 1, m - 1);}}// 主函数,程序入口public static void main(String[] args) {// 创建 Scanner 对象,用于读取用户输入Scanner sc = new Scanner(System.in);// 读取用户输入的整数 nint n = sc.nextInt();// 读取用户输入的整数 kint k = sc.nextInt();// 调用递归函数 f(n, k),计算分拆方式数量// 输出结果System.out.println(f(n, k));}
}

思维导图:

训练方法:

  1. 理解递归思想:仔细阅读代码,确保理解递归的终止条件和递归逻辑。

  2. 手算小例子:选择一个小的例子(如 n = 4m = 2),手动计算递归调用的过程,然后用代码验证结果。

  3. 调试和优化:观察递归调用的深度和次数,尝试用记忆化技术优化代码,避免重复计算。

  4. 扩展应用:将代码逻辑应用到其他类似问题,如“将整数分成任意多份”的问题

2.数的计算

题目描述

输入一个自然数 n (n≤1000)n (n≤1000),我们对此自然数按照如下方法进行处理:

  1. 不作任何处理;

  2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;

  3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止。

问总共可以产生多少个数。

输入描述

输入一个正整数 nn。

输出描述

输出一个整数,表示答案。

输入输出样例

示例 1

输入

6

输出

6

递归解题思路

看到“整数分拆”问题,直接想到“递归”

递归的核心思想:将大问题分解为小问题,通过解决小问题来构建大问题的解。

递归的终止条件:当 n == 1 时,分拆方式数量为 1。

递归的分解逻辑:通过遍历从1到n/2的数i,每次将当前数i分拆,并递归计算i的分拆方式。

解题步骤模板:

public static void f(int n) {// 递归终止条件if (n == 1) {return;}// 遍历 i 从 1 到 n/2,计算分拆方式for (int i = 1; i <= n / 2; i++) {// 每次分拆时,增加结果计数res++;// 递归计算更小的整数 i 的分拆方式f(i);}
}

示例代码模板:

import java.util.Scanner;public class Main {// 全局变量,用于存储最终结果static int res = 1;// 递归函数,用于计算整数 n 的分拆方式数量public static void f(int n) {// 递归终止条件:当 n == 1 时,分拆方式数量为 1if (n == 1) {return;}// 遍历 i 从 1 到 n/2,计算分拆方式for (int i = 1; i <= n / 2; i++) {// 每次分拆时,增加结果计数res++;// 递归计算更小的整数 i 的分拆方式f(i);}}// 主函数,程序入口public static void main(String[] args) {// 创建 Scanner 对象,用于读取用户输入Scanner sc = new Scanner(System.in);// 读取用户输入的整数 nint n = sc.nextInt();// 调用递归函数 f(n),计算分拆方式数量f(n);// 输出最终结果System.out.println(res);}
}

思维导图:

训练方法:

  1. 理解递归思想:仔细阅读代码,确保理解递归的终止条件和递归逻辑。

  2. 手算小例子:选择一个小的例子(如 n = 4),手动计算递归调用的过程,然后用代码验证结果。

  3. 调试和优化:观察递归调用的深度和次数,尝试用记忆化技术优化代码,避免重复计算。

  4. 扩展应用:将代码逻辑应用到其他类似问题,如“将整数分成特定数量的份”或“将整数分成不相等的份”的问题。

 

 自学蓝桥杯笔记,希望我们可以一起学习!

http://www.dtcms.com/wzjs/784280.html

相关文章:

  • 网站建设的知名品牌有哪些网站适合大学生做兼职
  • 用网站源码怎么做网站网站建设案例分析题
  • 网站建设市场数据分析炫彩发光字制作免费网站
  • 网络工程师需要具备什么条件做搜狗手机网站优化首
  • 自己做游戏的网站吉林网络公司哪家好
  • 图书馆网站建设公司新手如何给自己的网站做优化
  • 设计师常去的素材网站简约网站欣赏
  • 网站开发用什么编辑器好点深圳视频剪辑培训机构排行
  • 山东公司网站建设有哪些好的模板网站
  • 什么网站可以做进出口买卖网页界面布局
  • 销量不高的网站怎么做西安广告设计培训
  • 免费网站空间php王野小说
  • php网站设计要学多久vps服务器中的网站不显示图片
  • 给公司建立一个网站吗做网站怎么去进行链接
  • 乌克兰集团网站建设外贸营销网站建站
  • 网站制作首选 新鸿儒北京注册公司代理机构排名
  • 2017网站发展趋势拉丝机东莞网站建设
  • 连江县住房和城乡建设局网站没有做老千的斗牛网站6
  • 济宁网站建设公司最新报价手机qq插件wordpress
  • 做高端品牌生产商的网站酒泉网站建设培训
  • 视频多的网站建设网站建设有钱赚吗
  • 淘宝做网站的店获得网站所有关键字
  • 重庆网站建设 微客巴巴做的比较好的教育网站
  • 网站工作和网站建设管理工作餐饮公司网站模板
  • 网站建设发布教程高端建站神器
  • 小说网站开发项目简介在网站上做远程教育系统多少钱
  • 设计得好的美食网站网站备案 名称 不一致
  • 网站建设的市场有多大平面网页设计是什么
  • php做企业网站江苏省住房保障建设厅网站首页
  • 柳州网站seo网站s湖州营销网站建设