C语言 每日一题

2023-11-19

9月13日 星期一

题目一:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

题目描述:

  • 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是0。

程序分析

  • 待补充

输入描述:

  • 输入一个int型整数

输出描述:

  • 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例:

输入
9876673
输出
37689

题目解析:

#include <stdio.h>
int main()
{
    int n,m=0;
    scanf("%d",&n);
    int a[10]={0};
    while(n){
        if(a[n%10]==0)
        {
            a[n%10]++;
            m=m*10+n%10;
        }
        n/=10;
    }
    printf("%d",m);
    return 0;
}

题目二:输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是0。

题目描述:

  • 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析

  • 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

输入描述:

输出描述:

  • 输出不重复的三位数

示例:

1,2,3
1,2,4
1,3,2
1,3,4
1,4,2
1,4,3
2,1,3
2,1,4
2,3,1
2,3,4
2,4,1
2,4,3
3,1,2
3,1,4
3,2,1
3,2,4
3,4,1
3,4,2
4,1,2
4,1,3
4,2,1
4,2,3
4,3,1
4,3,2

题目解析:

  1. 方法一:容易想到,但是浪费了CPU的资源,执行很多不必要的循环

    #include<stdio.h>
     
    int main()
    {
        int i,j,k;
        printf("\n");
        for(i=1;i<5;i++) { // 以下为三重循环
            for(j=1;j<5;j++) {
                for (k=1;k<5;k++) { // 确保i、j、k三位互不相同
                    if (i!=k&&i!=j&&j!=k) { 
                        printf("%d,%d,%d\n",i,j,k);
                    }
                }
            }
        }
    }
    
    
  2. 方法二:尽量减少不必要的循环,做了如下的小优化。

    #include <stdio.h>
    #include <stdint.h>
    
    int main() {
        uint32_t i; // 百位
        uint32_t j; // 十位
        uint32_t k; // 个位
        
        for (i=1; i<5; i++) {
            for (j=1; j<5; j++) {
                // 百位与十位重复
                // 跳过当前十位
                if (j==i) {
                    continue;
                }
                
                for (k=1; k<5; k++) {
                    // 个位与百位或十位重复
                    // 跳过当前个位
                    if (k==j || k==i) {
                        continue;
                    }
                    
                    printf("%u,%u,%u\n", i, j, k);
                }
            }
        }
    }
    	
    	```
    
    
  3. 方法三:深搜法(DFS)写此题,采用嵌套函数,可以不用写多个for循环。如果遇到需要很多个for循环的情况可以采用这种方案。

    #include <stdio.h>
    #include <stdlib.h>
    
    int  b[4],arr[4];//定义两个数组用来类比
    int Count=0;//计数器
    void DFS(int step){
        if(step==5){
            if(arr[1]!=arr[2]&& arr[1]!=arr[3]&&arr[2]!=arr[3]){//判断哪些符合条件
                Count++;
                printf("%d%d%d\n",arr[1],arr[2],arr[3]);//输出可用排列
            }
            return ;
        }
    
        for(int i=1;i<=4;i++){
            if(b[i]==0){
                arr[step]=i;
                b[i]=1;//排除重复
                DFS(step+1);//自己调用自己
                b[i]=0;
            }
        }
        return ;
    }
    
    int main(void)
    {
        DFS(1);
        printf("共有%d种",Count);
        return 0;
    }
    
    

9月14日 星期二

9月15日 星期三

9月16日 星期四

9月17日 星期五

9月18日 星期六

9月19日 星期日

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言 每日一题 的相关文章

  • 第一个只出现一次的字符(Java)

    题目 在字符串中找出第一个只出现一次的字符 如输入 abaccdeff 则输出 b 第一思路 借助于数组来做 开辟一个长度为26的数组 用来存放字符串中每个字符出现的次数 这样第一次扫描去统计这个字符串中字符出现的次数 第二次去统计第一个出

随机推荐

  • [Leetcode] 3.无重复字符的最长子串

    题目描述 给定一个字符串 找出不含有重复字符的最长子串的长度 示例 给定 abcabcbb 没有重复字符的最长子串是 abc 那么长度就是3 给定 bbbbb 最长的子串就是 b 长度是1 给定 pwwkew 最长子串是 wke 长度是3
  • CUDA复制测试

    这里主要是测试了内存数据读写操作的几种方式 记录了一些测试结果 对于二维数组 10244 1024 4 1 二维线程格 每个线程对应一个元素 2 转换为int2类型 线程宽度减半 3 线程宽度和高度减半 单个线程操作邻近的4个元素 4 线程
  • 使用神经网络对手写体数字图片数据分类(MLP/PCA)

    使用神经网络对手写体数字图片数据分类 MLP PCA 使用sklearn neural network MLPClassifier类实现手写数字图片识别 MLP的常用的几个参数一般为activation 选择激活函数 如relu sigmo
  • 《2023新版JavaWeb开发教程》学习笔记总目录

    本篇文章是本人对于黑马程序员的 2023新版JavaWeb开发教程 的个人向知识点总结归类 用于巩固自身所学知识 以及查阅知识点和相关代码 并尝试养成做笔记的习惯 黑马程序员2023新版JavaWeb开发教程 实现javaweb企业开发全流
  • git status 展示的中文文件乱码

    乱码现象 解决方法 1 打开 项目根目录下的 git config 配置文件 2 在图中位置追加 quotepath false 效果图
  • 权重计算方法三:变异系数法(Coefficient of Variation)

    目录 1 原理简介 2 步骤详解 2 1 原始数据收集 2 2 指标数据正向化 2 3 数据标准化 消除量纲 2 4 计算变异系数 2 5 计算权重及得分 3 案例分析 3 1 获取原始数据 3 2 指标正向化 3 3 数据标准化 3 4
  • 电巢携手武昌工学院工程能力实训顺利开班!

    为深化校企合作 产教融合打造新工科建设 提升学生工程实践能力 电巢工程能力实训班按照不同岗位类别 匹配对应的企业岗位任职能力要求对学生开展分级培养 以产业需求为导向 培养创新型 应用型人才 6月6日下午4时 深圳电巢联合武昌工学院信息工程学
  • IDEA中如何使用debug调试项目 一步一步详细教程

    原文链接 https www linuxidc com Linux 2017 09 146772 htm 在现在的开发中 我们经常采用Debug来追踪代码的运行流程 通常在程序运行过程中出现异常 启用Debug模式可以分析定位异常发生的位置
  • ST-LINK在MDK环境下载hex提示“Internal command error”和“Error:Flash Download failed Cortex-M3”错误的解决办法

    ST LINK V2在MDK环境下 使用SW DP模式下载hex时出现以下错误提示 出现这种错误一般都是ST LINK和目标板SW DP接线时没有将目标板的电源线接到ST LINK插座的TVCC端导致的 解决步骤 1 目标板使用外接电源供电
  • JDK8新特性(二):JDK8接口增强

    1 接口增强 在JDK8之前 JDK规定接口中只能定义 静态常量 抽象方法 修饰词 interface 接口名 静态常量 抽象方法 在JDK8之后 对接口进行了增强 我们可以在接口中定义 静态常量 抽象方法 默认方法 静态方法 修饰词 in
  • CUDA各版本官方下载地址

    一 CUDA各版本官方下载地址 地址 https developer nvidia com cuda toolkit archive 二 说明 备忘 平时找个版本太难找了 转载于 https www cnblogs com songxing
  • Vue2 + 高德地图API 获取用户当前位置等信息,错误default.CitySearch is not a Constructor的应对

    效果 高德地图API参考手册 控制台输出信息 代码 public index html 使用CDN引入高德地图API
  • SQL--查询结果最后加合计行

    union all 是一种 SQL 操作符 用于将两个或多个 SELECT 语句的结果集合并成一个结果集 与 union 不同的是 union all 不会去重 即会保留重复的行 使用 union all 可以方便地将多个表或查询结果合并成
  • 计算机二级【C语言】-复习使用

    文章目录 第一章 C语言概述 1 1 C语言基础知识 1 23题 1 2 常量 变量和数据类型 24 73题 第二章 运算符与表达式 2 1 C语言运算符简介 74 79题 2 2 算术运算符和算数表达式 80 99题 2 3 赋值运算符和
  • Docker环境安装

    安装Docker 开启Docker服务 查看安装结果 设置开机启动 配置Docker镜像下载加速
  • 【第42篇】MicroNet:以极低的 FLOP 实现图像识别

    文章目录 摘要 一 简介 二 相关工作 三 我们的方法 MicroNet 3 1 设计原则 3 2 Micro Factorized 卷积 3 3 动态 Shift Max 3 4 与先前工作的关系 四 MicroNet 架构 五 实验 I
  • JWT解析库-nimbus-jose-jwt

    JWT解析库 nimbus jose jwt nimbus jose jwt 使用他可以生成或者解析对称加密或者非对称加密的的JWT JWS是JWT规范的落地实现 1 依赖 1 1 pom依赖
  • 深夜好文

    题图 https unsplash com oldskool2016 无论项目中还是面试都离不开装饰器话题 装饰器的强大在于它能够在不修改原有业务逻辑的情况下对代码进行扩展 权限校验 用户认证 日志记录 性能测试 事务处理 缓存等都是装饰器
  • 时间复杂度常见算法

    常见时间复杂度对应算法 注 if的时间复杂度为O 1 一层for循环时间复杂度为O n 两次for循环时间复杂度为O n 一个算法中有多个for 但都是单层for 时间复杂度为O n
  • C语言 每日一题

    C语言 每日一题 9 13 9 19 9月13日 星期一 题目一 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 题目二 输入一个int型整数 按照从右向左的阅读顺序 返回一个不含重复数字的新的整数 保证输入的整