首页 > 编程语言 >C++U4- 04 - 新递推2

C++U4- 04 - 新递推2

时间:2024-03-23 21:13:14浏览次数:40  
标签:格子 04 int U4 C++ 涂色 时有 种涂法 递推

 排列

 公式

 单选

 组合数

 单选

 递推练习

[直线分割平面问题]

 

 

 

【参考代码】

#include <iostream>
using namespace std;
int a[1010];  //a[i]:第i条直线最多能将 这个圆分割成的部分数 
int main() {
    //1、定义变量n,进行输入,数组a进行存储 
    int n;
    cin >> n;
    //2、初始条件,1条直线最多可以将圆分割成两部分 
    a[1] = 2;
    //3、递推出n条直线,a[i] = a[i - 1] + 交点数 + 1; 
    for(int i = 2; i <= n; i++){
        a[i] = a[i - 1] + i; //递推式 
    }
    //4、输出 
    //输出 n 条直线最多能将这个圆分割成的部分数
    cout << a[n];
    return 0;
}
View Code

 

 

[格子涂色问题]

 

 

 

 

 

【思路分析】
用 a[i] 表示把 i 个格子按要求涂色的涂法,易得:
当 i=1 时,有 1 个格子时有 3 种涂法;当 i=2 时,有 2 个格子时有 6 种涂法;当 i=3 时,有 3 个格子时有 6 种涂法。

当 i≥4 时,假设已经求出 a[1]~a[i−1],求 a[i],对于 a[i−1] 有两种情况:
(1)第 i−1 格的涂色合法,即在没有加入第 i 个格子的时候,第 i−1 个格子和第 i−2 个格子颜色不同且和第 1 个格子的颜色也不相同。当加入第 i 个格子,第 i 个格子的颜色已经是确定的。所以此时的方案数为:

a[i−1]×1=a[i−1]

(2)第 i−1 格的涂色不合法(对于整体的 i 个格子依然是合法的),即在没有加入第 i 个格子的时候,即第 i−1 个格子和第 i−2 个格子颜色不同但是和第 1 个格子的颜色相同。当加入第 i 个格子,第 i 个格子有两种情况。此时的方案数为:

a[i−2]×1×2=2×a[i−2]
分类用加法原理,分步用乘法原理
综合以上两种情况:
a[i]=a[i−1]+2×a[i−2],i≥4

1、定义变量n,进行输入,定义数组a,进行存储

2、初始条件,1个格子时有3种涂法, 2个格子时有6种涂法,3个格子时有6种涂法

3、递推式:a[i]=a[i-1]+2*a[i-2]

4、输出

【参考代码】
#include <iostream>
using namespace std;
long long a[66]; //a[i]:把i个格子 按要求涂色的涂法 
int main() {
    //1、定义变量n,进行输入,定义数组a,进行存储 
    int n;
    cin >> n;
    //2、初始条件,1个格子时有3种涂法, 2个格子时有6种涂法,3个格子时有6种涂法
    a[1] = 3; 
    a[2] = 6; 
    a[3] = 6;
    //3、递推式:a[i]=a[i-1]+2*a[i-2] 
    for(int i = 4; i <= n; i++){
        a[i] = a[i - 1] + 2 * a[i - 2];
    }
    //4、输出 
    cout << a[n]; //输出把 n 个格子按要求涂色的涂法
    return 0;
}
View Code

 

标签:格子,04,int,U4,C++,涂色,时有,种涂法,递推
From: https://www.cnblogs.com/jayxuan/p/18091680

相关文章

  • C++必知必会 C++11实用特性
    文章目录前言nullptr和NULLconst和constexprauto和decltypelambda表达式function和bind右值引用移动语义move智能指针前言C++11开始添加了很多好用的新特性,个人认为想要真正掌握这些特性还是需要多读代码,多应用这些特性,本文只记录了一些个人用过的,并结合自己的使用......
  • 【华为OD机试】真题A卷-连接器问题(C++)
    一、题目描述【华为OD机试】真题A卷-连接器问题(C++)题目描述:有一组区间[a0,b0],[a1,b1],…(a,b表示起点,终点),区间有可能重叠、相邻,重叠或相邻则可以合并为更大的区间;给定一组连接器[x1,x2,x3,…](x表示连接器的最大可连接长度,即x>=gap),可用于将分离的区间连接起来,但两个分离区间之间只......
  • 突破编程_C++_C++11新特性(lambda表达式的基础知识)
    1Lambda表达式简介1.1Lambda表达式的定义与概念Lambda表达式是C++11引入的一种函数对象的匿名表示方法,它的定义与概念基于数学中的λ演算。Lambda表达式为程序员提供了一种更加简洁、灵活的方式来定义轻量级的、临时的、内联的函数对象,通常用于函数式编程的场景......
  • 跳马【华为OD机试JAVA&Python&C++&JS题解】
    一.题目马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或直着走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称“马走‘日’字。给顶m行n列的棋盘(网格图),棋盘上只有有棋子象棋中的棋子“马”,并且每个棋子有等级之分,等级为k的马可以跳1~k......
  • C++ [NOIP2008 普及组] ISBN 号码
    文章目录一、题目描述[NOIP2008普及组]ISBN号码题目描述输入格式输出格式样例#1样例输入#1样例输出#1样例#2样例输入#2样例输出#2提示二、参考代码一、题目描述[NOIP2008普及组]ISBN号码题目描述每一本正式出版的图书都有一个ISBN号码与之对应,IS......
  • C++ 三角函数
    文章目录一、题目描述三角函数题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示二、参考代码一、题目描述三角函数题目描述输入一组勾股数a,b......
  • C++ 最长连号
    文章目录一、题目描述最长连号题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示数据规模与约定二、参考代码一、题目描述最长连号题目描述输入长度为nn......
  • 字符串翻转(C++)
    示例:        翻转前:tobeornottobe        翻转后:otebrotonoteb基本思路:        利用strtok字符串切割函数拿到每一部分,存储到一个字符串数组中,再将每一个字符串数组倒置。最后顺序输出。程序代码:#include<iostrem>#include<string>#......
  • 2024华为OD统一考试(C卷)最新题库(Java & Python & C++)
    关于华为OD​华为的员工补充途径有三种,分别是校招、OD转正和社招。校招是华为唯一的正式员工入职途径,但是从近几届开始竞争非常激烈,尤其是在CV、AI、NLP等赛道上,所以对于C9等专业的学生来说,可以考虑转向一些冷门方向。​OD转正是指在华为工作满一年之后,可以根据部门OD......
  • C++之引用
    1.引用的概念引用不是定义一个变量,而是给已经存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它所引用的变量使用同一块内存空间。类型&引用变量名(对象名)=引用实体 inta=10;int&b=a;//表示b是a的别名运行结果如下: 注意:引用类型必须和引用实......