啊哈c语言——逻辑挑战14(一个萝卜一个坑)

news2024/11/25 2:35:28

        这里有一个有趣的问题:从键盘输入5个0~9的数,然后输出0~9 中那些没有出现过的数。例如,输入2 5 2 1 8时,输出0 3 4 6 7 9。

        想一想,有没有什么好办法?

        我们这里借助一个数组就可以解决这个问题。

        首先我们需要申请一个大小为10的数组int a[10];。好了,现在你已经有了10个小房间,编号为a[0]~a[9]。

        刚开始的时候,我们将a[0]~a[9]都初始化为0。

        然后用a[0]来表示数字0是否会出现,用a[1]来表示数字1是否会出现……用a[9]来表示数字9是否会出现。

        下面就好办了,一会儿哪个数字出现,我们就把相应的小房间的值 从0改为1。例如,第一个出现的数是2,我们就把a[2]这个小房间中的值 从0变为1。

        

        下一个出现的数是5,我们就把a[5]这个小房间中的值从0变为1。

        注意啦,接下来出现的数又是2,此时a[2]这个小房间中的值已经是1,所以值还是1。

         接下来出现的数是1,我们就把a[1]这个小房间中的值从0变为1。

看一下最后a[0]~a[9]这10个小房间中的数,你会惊奇地发现:出现过的数,它们所对应的小房间中的值都为1;没有出现过的数所对应 的小房间中的值都为0。接下来,只需把小房间中值为0的小房间的编号输出就可以啦。

        

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[10], i, t;
    for(i=0; i<=9; i++)
    a[i]=0; //初始化每个小房间为0
    for(i=1; i<=5; i++)
    {
        scanf("%d", &t); //依次读入5个数
        a[t]=1; //把对应的小房间改为1
    }
    for(i=0; i<=9; i++)
    if(a[i]==0) //输出没有出现过的数
    printf("%d ", i);
    system("pause");
    return 0;
}

        好了,大功告成了!其实这个方法就是“一个萝卜一个坑”。我们将 0~9中的每个数都用单独1个房间来表示,每出现一个数,就将所对应的房间中的值改为1,最后只要看看哪些房间里面的值仍然是0就好了。

        就好比原来有10个萝卜,从0~9编号:

        然后安排人去拔萝卜,第1个人去拔2号萝卜。第2个人去拔5号萝卜,第3个人再去拔2号萝卜(其实此时2号萝卜已经被拔走了),第4个人去拔1号萝卜,第5个人去拔8号萝卜,最后剩下的萝卜的就是答案了。是不是很简单呢?

        

        下一个问题:如果现在需要将输入的5个数(范围是0~9)从小到大排序,该怎么办?例如,输入2 5 2 1 8,则输出1 2 2 5 8。

        也很简单,只需将上面的代码稍加改动就可以了。

        首先我们仍然需要申请一个大小为10的数组int a[10],编号为a[0]~ a[9],并初始化为0。

        在之前的程序中,哪个数字出现了,我们就将相应的小房间的值从0变为1。而现在我们只需将“小房间的值从0变为1”改为“小房间的值加 1”就可以了。例如、2出现了,就将a[2]中的值加1。

        接下来的数是5,就将a[5]中的值加1。

        到目前为止,貌似和之前的程序没什么不同。下面,关键的一步来了。下一个出现的数又是2,我们再将a[2]中的值加1。

        注意到没有,此时a[2]中的值为2。

        接下来的数是1,就将a[1]中的值加1。

        最后一个数是8,将a[8]中的值加1。

        发现没有,其实a[0]~a[9]中所记录的数值就是0~9每个数所出现的次数。其中1出现1次,2出现2次,5出现1次,8出现1次。

        接下来,我们只需将出现过的数,按照出现的次数打印出来就可以了。具体如下:

        a[0]为0,表示0没有出现过,不打印。

        a[1]为1,表示1出现过1次,打印1次。屏幕上显示“1”

        a[2]为2,表示2出现过2次,打印2次。屏幕上显示“1 2 2”

        a[3]为0,表示3没有出现过,不打印。

        a[4]为0,表示4没有出现过,不打印。

         a[5]为0,表示5出现过1次,打印1次。屏幕上显示“1 2 2 5”

        a[6]为0,表示6没有出现过,不打印。

        a[7]为0,表示7没有出现过,不打印。

         a[8]为1,表示8出现过1次,打印1次。屏幕上显示“1 2 2 5 8”

         a[9]为9,表示9没有出现过,不打印。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[10], i, j, t;
    for(i=0; i<=9; i++)
    a[i]=0; // 初始化为0
    for(i=1; i<=5; i++) // 循环读入5个数
    {
        scanf("%d", &t); // 把每一个数读到变量t中
        a[t]++; // t所对应小房子中的值增加1
    }
    for(i=0; i<=9; i++) // 依次判断0~9这个10个小房子
    for(j=1; j<=a[i]; j++) //出现了几次就打印几次
    printf("%d ", i);
    system("pause");
    return 0;
}

        至此,我们已经巧妙地将输入的数据,按照从小到大的顺序排序了。当然,你也可以从大到小排序,自己想一想吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】 链栈的基本操作 (C语言版)

目录 一、链栈 1、链栈的定义&#xff1a; 2、链栈的优缺点&#xff1a; 二、链栈的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、链栈的初始化 4、链栈的进栈 5、链栈的出栈 6、获取栈顶元素 7、栈的遍历输出 8、链栈的判空 9、求链…

车辆 | 平行泊车路径规划碰撞约束及可行驶区域公式推导

注&#xff1a;本文推导参考网上论文并加上了一些自己的理解&#xff0c;侵权删。 一、碰撞约束&#xff1a; 需要先计算D 点&#xff08;D 点为第一段圆弧路径的终点&#xff09;位置&#xff0c;再根据 D 点计算C 点范围区域。 其中&#xff1a;Lp为车位长度&#xff0c;最…

【论文阅读】Automated Runtime-Aware Scheduling for Multi-Tenant DNN Inference on GPU

该论文发布在 ICCAD’21 会议。该会议是EDA领域的顶级会议。 基本信息 AuthorHardwareProblemPerspectiveAlgorithm/StrategyImprovment/AchievementFuxun YuGPUResource under-utilization ContentionSW SchedulingOperator-level schedulingML-based scheduling auto-searc…

联想M7268、7208打印机加粉清零方法

联想小新M7268激光一体机基本参数 产品类型 黑白激光多功能商用一体机 涵盖功能 打印/复印/扫描 最大处理幅面 A4 耗材类型 鼓粉分离 耗材容量 硒鼓LD2268&#xff1a;10000页&#xff0c;墨粉LT2268&#xff1a;1000页 双面功能 手…

Spring复习-问题回答

1.什么是 spring&#xff0c;你对 spring 的理解? Spring是一个轻量级&#xff0c;非侵入式的&#xff08;不使用框架特定的类&#xff0c;感受不到框架&#xff09;IOC和AOP一站式的java后端开发框架&#xff0c;简化企业开发。 2.spring 的优缺点 优点&#xff1a; Spr…

C++11新特性:拓展的friend语法

在C中&#xff0c;friend关键字用于声明一个函数或类是另一个类的友元&#xff08;friend&#xff09;。被声明为友元的函数或类可以访问包含它的类的私有成员。 使用friend关键字应当谨慎&#xff0c;因为它破坏了封装性&#xff0c;增加了类之间的耦合性。友元关系应该仅在确…

Spring中Bean对象的存储与读取

创建 Maven 项目 添加 Spring 框架支持 在项目的 pom.xml 中添加 Spring 支持 如何选定版本环境&#xff1a;打开官网&#xff0c;点击github图标 jdk8最后一个Spring版本是5.3.x&#xff0c;Spring6.0.x最低需要jdk17 <dependencies><dependency><groupId&…

QT upd测试

QT upd测试 本次测试将服务器和客户端写在了一个工程下&#xff0c;代码如下 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QUdpSocket> #include<QTimer>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE…

Windows下RocketMQ搭建

RocketMQ安装 注&#xff1a;Windows必须先安装64bit的 JDK1.8 或以上版本及Maven 。 1.官网下载&#xff1a;下载 | RocketMQ 2.将下载下的安装文件解压到本地磁盘 3.配置环境变量 &#xff1a; 变量名&#xff1a;ROCKETMQ_HOME 变量值&#xff1a;G:\RocketMQ\rocketmq…

常用电子器件学习——MOS管

MOS管介绍 MOS&#xff0c;是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管&#xff0c;简称金氧半场效晶体管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET&#xff09;。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…

SpringBoot 中配置处理

1、简介 本文介绍一些 springboot 配置管理相关的内容&#xff0c;如何自定义配置&#xff0c;导入配置&#xff0c;配置绑定和基于 profiles 的配置。 2、springboot 配置管理 2.1、自定义配置类 在 spring 中使用 Configuration 注解定义配置类&#xff0c;在 springboot 中…

利用GPU加速自定义风格图像生成-利用GPU加速结合了ControlNet/ Lora的Stable Diffusion XL

点击链接完成注册&#xff0c;参加本次在线研讨会 https://www.nvidia.cn/webinars/sessions/?session_id240124-31319 随着AI技术的发展, 数字内容创建业务也变得越来越火热。生成式AI模型的发布, 让我们看到了人工智能在各行各业的潜力。您只需要用语言简单描述自己希望看…

【Python】FastApi框架搭建部署

FastApi 是一个现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;用于基于标准Python构建的API。 官方网址&#xff1a;FastAPI 1.安装 1.1 环境信息 # Python版本 3.8.0 1.2 安装 FastApi pip install fastapi # uvicorn 作为服务启动fastapi框架 pip i…

【牛客】几何糕手、国际裁判带师、数位dp?、灵异背包、矩阵快速幂签到、第一次放学

文章目录 《几何糕手》题目描述思路代码 《国际裁判带师》题目描述思路代码 《数位dp?》题目描述思路代码 《灵异背包》题目描述思路代码 《矩阵快速幂签到》题目描述思路代码 《第一次放学》题目描述思路代码 《几何糕手》 题目链接 题目描述 “芝士肾么&#xff1f;” 地…

Mysql的骚操作说明

Mysql的常规操作 记录些不常用,但是很实用的操作,旨在在MySQL语言能解决的批量操作的问题,不动用其他动态或静态语言的辅助。 1、FROM_UNIXTIME 时间戳转时间格式 select scode,sid,gender,type,FROM_UNIXTIME(report_time) as report_time,FROM_UNIXTIME(add_time) as add…

基于SpringBoot的教务管理系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教务管…

finalshell连接linux的kali系统

kali的ssh服务似乎是默认关闭的&#xff0c;笔者在玩CentOS系统时可以直接用finalshell完成连接&#xff0c;但kali不行&#xff0c;需要先手动开启ssh服务。 开启kali的ssh服务 输入【ssh start】命令开启ssh服务&#xff0c;可以用【ssh status】命令查看ssh状态&#xff0c…

【Linux】vim 操作指令详解

Linux 1 what is vim &#xff1f;2 vim基本概念3 vim的基本操作 &#xff01;3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(&#xff65;ω&#xff65;)&#xff89;感谢阅读下一篇文章见&#xff01;…

API协议设计的十种技术

文章目录 前言一、REST二、GraphQL三、gRPC&#xff08;google Remote Procedure Calls&#xff09;四、Webhooks五、服务端的事件发送——SSE&#xff08;Server-sent Events&#xff09;六、EDI&#xff08;Electronic Data Interchange&#xff09;七、面向API 的事件驱动设…

【.NET Core】深入理解异步编程模型(APM)

【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09; 文章目录 【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09;一、APM概述二、IAsyncResult接口2.1 BeginInvoke2.2 EndInvoke2.3 IAsyncResult属性2.4 IAsyncResult异步演示 三、通过结束异步操作来…