刷题刷题。

这篇具有很好参考价值的文章主要介绍了刷题刷题。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自然数拆分


利用step记录组合情况,只用sum不能判断组合情况

1.选择dfs原因:产生排列组合,和为7,step为8,其中7个空位,第8个step为输出;

    参量的设置sum,step (进入下一层);

2.终止条件:sum>7  剪枝干    (此时最终step不一定为8)!!!!!

3.输出条件:sum==7,注意最后的值和前面的值输出形式不同;

4.dfs递归--for循环的设置:i为(1-7)需要放入每层的值;

5.注意:标记问题:同一数可以重复使用

              组合问题:i 从上一层的值开始递增7结束i=a[step-1],同时注意a[0]边界

              回溯问题:sum+=i;   dfs(step+1);   sum-=i;    等价于   dfs(sum+i,step+1)

              因为这一层的sum没有改变

刷题刷题。

#include<stdio.h>
#include<string.h>
int n;
int a[1000];
void dfs(int sum,int step)
{
    if(sum>n) return ;  //注意!!!!!边界情况
    if(sum==n)
    {
        for(int i=0;i<=step-2;i++)
        printf("%d+",a[i]);
        printf("%d\n",a[step-1]);
        return ;
    }
    //组合,可重复,从上一层最小值开始
    //同时注意初始边界值a[step-1]
    for(int i=a[step-1];i<n;i++)
    {
        a[step]=i;     //放入
        dfs(sum+i,step+1); //递归
        //这里无需标记,组合可重复使用
    }
}
int main()
{
    scanf("%d",&n);
    a[0]=1;
    dfs(0,1);
    return 0;
}

 八皇后


1.解题关键:横竖斜只有1个皇后;斜:横纵坐标之和,横纵坐标之差

2.dfs参数设置:step,不用调用每层x,y,不是迷宫探险类,只用check二维数组上每一点

3.for循环设置:check,该step层皇后是否满足check;

4.终止条件:step==n+1;

注意:i 行,a[ i ]列  

刷题刷题。文章来源地址https://www.toymoban.com/news/detail-442759.html

#include<stdio.h>
int n,a[20];                 //i表示行,a[i]表示列;
int cnt=0;
int check(int x,int y)      //n皇后是否成立,check游戏标准:横竖斜仅有一个皇后;
{
    for(int i=1; i<=x; i++)         //无需讨论行==情况,每次放step都是一行一行放的
    {
        if(a[i]==y)return 0;       //皇后位置和其他皇后列==(×)
        if(i+a[i]==x+y)return 0;   //皇后位置和其他皇后对角线1(×)
        if(i-a[i]==x-y)return 0;   //皇后位置和其他皇后对角线2(×)
    }
    return 1;
}
void dfs(int step)         //表示第step个皇后放在何处
{
    if(step==n+1)          //dfs最后一层为输出
    {
        cnt++;             //解的个数
        if(cnt<=3)
        {
            for(int i=1; i<=n; i++)
            {
                printf("%d ",a[i]);     
                if(i%n==0)printf("\n");
            }
 
        }
        return ;
    }
    for(int j=1; j<=n; j++) //共1-8列
    {
        if(check(step,j))   //check第step行的皇后是否能放在j列上
        {
            a[step]=j;      //放在j列,标记;
            dfs(step+1);    //进入下一层,放下一个皇后;
            a[step]=0;     //取消标记
        }
    }
}
int main()
{
    scanf("%d",&n);
    dfs(1);              //第一层开始
    printf("%d",cnt);   
    return 0; 
}

到了这里,关于刷题刷题。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用连续自然数之和来表达整数(100%用例)C卷 (Java&&Python&&C++&&Node.js&&C语言)

    一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为: 1.自然数个数最少的表达式优先输出 2.每个表达式中按自然数递增的顺序输

    2024年01月16日
    浏览(41)
  • 关于vue的element的输入框el-input限输入只能是数字,包含小数,正数,自然数等等。

    关于element的输入框el-input限输入只能是数字,就是包括数字123456,小数的只能一个小数点,不能出现多个小数点,小数可以0开头,但是整数不能0开头,不能输入文字,不能输入负数,所以对于这个我做了两个判断,一个是正则判断,还有一个是0开头的整数判断,正则判断是只

    2024年02月12日
    浏览(56)
  • C语言整型转字符型和字符型转整型的简便且有效的方法(对于自然数)

    最近做到题目涉及数据类型的转换,查了很多资料,发现博客上的文章在此方面不全面,特别是在整型转成字符型上提供的方法不太好(指比较复杂),因此想做个总结。此方法主要涉及atoi,itoa和sprintf函数。 主要提供2种方法。 方法1:利用+‘0’将单个数字转字符 代码演示

    2024年02月15日
    浏览(42)
  • Leetcod面试经典150题刷题记录 —— 矩阵篇

    Leetcod面试经典150题刷题记录-系列 Leetcod面试经典150题刷题记录——数组 / 字符串篇 Leetcod面试经典150题刷题记录 —— 双指针篇 本篇 Leetcod面试经典150题刷题记录 —— 矩阵篇 Leetcod面试经典150题刷题记录 —— 滑动窗口篇 Leetcod面试经典150题刷题记录 —— 哈希表篇 Leetcod面试

    2024年02月03日
    浏览(44)
  • Leetcode面试经典150题刷题记录 —— 矩阵篇

    Leetcod面试经典150题刷题记录-系列 Leetcod面试经典150题刷题记录——数组 / 字符串篇 Leetcod面试经典150题刷题记录 —— 双指针篇 本篇 Leetcod面试经典150题刷题记录 —— 矩阵篇 Leetcod面试经典150题刷题记录 —— 滑动窗口篇 Leetcod面试经典150题刷题记录 —— 哈希表篇 Leetcod面试

    2024年01月16日
    浏览(72)
  • Leetcode面试经典150题刷题记录 —— 数学篇

    Leetcode面试经典150题刷题记录-系列 Leetcod面试经典150题刷题记录——数组 / 字符串篇 Leetcod面试经典150题刷题记录 —— 双指针篇 Leetcod面试经典150题刷题记录 —— 矩阵篇 Leetcod面试经典150题刷题记录 —— 滑动窗口篇 Leetcod面试经典150题刷题记录 —— 哈希表篇 Leetcod面试经典

    2024年01月21日
    浏览(70)
  • Leetcode面试经典150题刷题记录 —— 二叉搜索树篇

    Leetcod面试经典150题刷题记录-系列 Leetcod面试经典150题刷题记录——数组 / 字符串篇 Leetcod面试经典150题刷题记录 —— 双指针篇 Leetcod面试经典150题刷题记录 —— 矩阵篇 Leetcod面试经典150题刷题记录 —— 滑动窗口篇 Leetcod面试经典150题刷题记录 —— 哈希表篇 Leetcod面试经典

    2024年01月23日
    浏览(67)
  • 刷题刷题。

    自然数拆分 利用step记录组合情况,只用sum不能判断组合情况 1.选择dfs原因:产生排列组合,和为7,step为8,其中7个空位,第8个step为输出;     参量的设置sum,step (进入下一层); 2.终止条件:sum7  剪枝干    (此时最终step不一定为8)!!!!! 3.输出条件:sum==7,注意最后

    2024年02月04日
    浏览(71)
  • 计算机二级python基础题刷题笔记

    :引导符号(必须有) 填充:用于填充的单个字符,比如“=”,“+” 对齐:左对齐,右对齐,^居中对齐 宽度:槽的设定,输出宽度 ,:数字的千位分隔符适用于整数和浮点数 .精度:浮点数小数部分的精度或字符串的最大输出长度 类型:整数类型b,c,d,o,x,X浮点数类型e,E,f,% b 表示

    2024年02月07日
    浏览(46)
  • 【力扣刷题】整数拆分(动态规划)

    个人简历: 全栈领域新星博主, 万粉博主、 帮助初学者入门,记录自己的学习过程 个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 热门专栏:初学者入门C语言_天寒雨落的博客-CSDN博客   目录 动态规划 整数拆分 题目 思路 代码 执行结果 其基本思想是将待求解

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包