假期刷题打卡--Day20

news2024/11/27 12:57:26

1、MT1173魔数

一个数字,把他乘以二,会得到一个新的数字,如果这个新数字依然由原数中那些数字组成,就称原数为一个魔数。输入正整数N,检查它是否是一个魔数,输出YES或者NO。

格式

输入格式:

输入正整数N

输出格式:

输出YES或者NO

样例 1

输入:

142857

输出:

YES
分析过程

看到这个题目的时候,第一想法是将输入数存入到一个数组当中,然后计算出2倍的输入数,然后拿计算出来的数一一和输入数的每一位进行对比。但是,在分析的时候,发现我遗漏了一下条件,这个题目需要实现的是两个条件:

  • 得到的两个数的个数相同,即每个数出现的次数应该是一样的;
  • 得到的两个数中的数字顺序可以不同,但是所含数字是一样的

所以,按照上述条件,我的解决思路是,先将两个数存入到两个数组当中,然后对两个数组里面的元素进行排序,如果每个元素都相同的话,则输出YES,否则输出NO。

        然后,按照这个思路,我写了一段代码:

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,a[10] = {0},b[10]={0};
    cin >> n;
    int q=n,m = 2 * n,p=m;
    int flag = 1;
    int count=0;
//首先将输入数存入数组中
    while(n!=0){
        a[count]=n%10;
        n/=10;
        count++;
    }
 //然后使用冒泡排序对输入数的元素进行从小到大排序
    for(int i=0;i<count-1;i++){
        for(int j=0;i<count-i-1;i++){//习惯性的把循环变量写成了i,但是在这应该是j
            if(a[j]>a[j+1]){
                int tmp = a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    } 
//将输入数的2倍数存入数组中
    while(m!=0){
        count = 0;//count每次放在里面,每次循环都置为0,最终结果只能是1,所以应该放在外面
        b[count]=m%10;
        m/=10;
        count++;
    }
    for(int i=0;i<count-1;i++){
        for(int j=0;i<count-i-1;i++){//这个也是同样的错误
            if(a[j]>a[j+1]){//这里是对b数组排序,而不是a,这里直接复制了,没有修改,应该全部修改为b
                int tmp = a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    } 
    for(int z=0;z>count;z++){//这里的判断语句就是错的,如果是>,那么永远无法为NO,所以,这里应该修改为<
        if(a[z]!=b[z]){
            flag = 0;
            break;
        }
    }
    if(flag==1) cout << "YES";
    else cout << "NO";
    return 0;
}

但是,只能通过一个用例:

于是,又开始了找错~

发现了好多个错误,难怪呢,于是,我把错误全部标在了上一个代码中。

修改错误后,得到了我想法的最终代码:

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,a[10] = {0},b[10]={0};
    cin >> n;
    int q=n,m = 2 * n,p=m;
    int flag = 1;
    int count=0,tmp;
//首先将输入数存入数组中
    while(n!=0){
        a[count]=n%10;
        n/=10;
        // cout << a[count];
        count++;
    }
    // cout << count;
 //然后使用冒泡排序对输入数的元素进行从小到大排序
    for(int i=0;i<count-1;i++){
        for(int j=0;j<count-1-i;j++){
            if(a[j]>a[j+1]){
                tmp = a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    } 
    // for(int i=0;i<count;i++){
    //     cout << a[i];
    // }
//将输入数的2倍数存入数组中
    count = 0;
    while(m!=0){
        b[count]=m%10;
        m/=10;
        // cout << b[count];
        count++;
    }
    // cout << count;
    for(int i=0;i<count-1;i++){
        for(int j=0;j<count-1-i;j++){
            if(b[j]>b[j+1]){
                tmp = b[j];
                b[j]=b[j+1];
                b[j+1]=tmp;
            }
        }
    } 
    // for(int i=0;i<count;i++){
    //     cout << b[i];
    // }
    for(int z=0;z<count;z++){
        if(a[z]!=b[z]){
            flag = 0;
            break;
        }
    }
    if(flag==1) cout << "YES";
    else cout << "NO";
    return 0;
}

我的这个思路感觉有点繁琐,所以,看了一下评论区的思路。

  • 每个数字出现的次数要相等
  • 用a、b两个数组分别记录两个数中每个数字(0~9)出现的个数,再比较a、b是否相等。

 用这个思路解决,代码行数大大减少(但是对于我来说,很难想到,现在慢慢学吧。):

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,a[10] = {0},b[10]={0};
    cin >> n;
    int q=n,m = 2 * n,p=m;
    int flag = 1;

    while(n!=0){
        int i=n%10;
        a[i]+=1;
        n/=10;
    }

    while(m!=0){
        int i = m%10;
        b[i]+=1;
        m/=10;
    }
    for(int z=0;z<10;z++){
        if(a[z]!=b[z]){
            flag = 0;
            break;
        }
    }
    if(flag==1) cout << "YES";
    else cout << "NO";
    return 0;
}

2、MT1176两个点的距离

给定笛卡尔平面上两个点的坐标,求它们之间的距离向上舍入为最接近的整数。

格式

输入格式:

输入整型,空格分隔

输出格式:

输出整型

样例 1

输入:

0 0 2 -2

输出:

3
相关知识点
1、笛卡尔平面

笛卡尔坐标系就是直角坐标系和斜坐标系的统称。

2、直角平面间两点的距离公式

    double a = pow((y2-y1),2);

    double b = pow((x2-x1),2);

    double l = sqrt(a+b);

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x1,y1,x2,y2;
    cin >> x1 >> y1 >> x2 >> y2;
    double a = pow((y2-y1),2);
    double b = pow((x2-x1),2);
    double l = sqrt(a+b);
    printf("%.0f",l);
    // cout << l;
    return 0;
}

我没理解这个和选择结构有什么区别,不是输入输出类型的题吗。不理解~

3、MT1186do-while循环

请编写一个简单程序,从大到小输出所有小于n的正整数,直到0为止(不含0)。n从键盘输入

格式

输入格式:

输入整型数n

输出格式:

输出整型,空格分隔

样例 1

输入:

10

输出:

10 9 8 7 6 5 4 3 2 1
实现代码

do-while循环不常用,记录一下最基本的用法吧。

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    do{
        cout << n << " ";
        n--;
    }while(n>0);
    return 0;
}

do-while语句需要注意的是,while后面需要加一个分号“;”

除此之外,也要注意,循环的基本条件,注意不能写反了。

明天继续吧。

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

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

相关文章

《Vite 基础知识》基于 Vite4 的 Vue3 项目创建(受 Nodejs 版本限制可参考)

真实的工作中 Node.js 版本不是随意可升级的&#xff0c;此处记录一次折中升级实战~ 本章基于 Vite4 开发&#xff01; Vite5、 Vitepress&#xff0c; 都需要 Node.js 版本 18&#xff0c;20 node/npmVite4Vite5Vitepress14.21.3 / 8.13.2&#x1f4af;20.11.0 / 10.2.4&#…

从零开始学Linux之gcc命令

首先我们需要知道有两种编程语言 编译型语言&#xff1a;要求必须提前将所有源代码一次性转换成二进制指令&#xff0c;也就是生成一个可执行程序&#xff0c;例如C、C、go语言、汇编语言等&#xff0c;使用的转换工具称为编译器。 解释型语言&#xff1a;一边执行一边转换&a…

[NOIP2011 提高组] 聪明的质监员

[NOIP2011 提高组] 聪明的质监员 题目描述 小T 是一名质量监督员&#xff0c;最近负责检验一批矿产的质量。这批矿产共有 n n n 个矿石&#xff0c;从 1 1 1 到 n n n 逐一编号&#xff0c;每个矿石都有自己的重量 w i w_i wi​ 以及价值 v i v_i vi​ 。检验矿产的流程…

muduo库的模拟实现——工具部分

文章目录 一、Buffer模块1.为什么需要Buffer缓冲区2.Buffer模块的设计3.Buffer模块的实现4.Buffer缓冲区的其它设计方案 二、Socket模块1.Socket模块的设计2.Socket代码实现 三、Acceptor模块1.Acceptor模块的设计与实现2.Acceptor模块完整代码实现 四、定时器模块1.时间轮的思…

opencv——将2张图片合并

效果演示: 带有绿幕的图片的狮子提取出来,放到另一种风景图片里! 1. 首先我们要先口出绿色绿幕,比如: 这里将绿色绿色绿幕先转为HSV,通过修改颜色的明暗度,抠出狮子的轮廓。 代码 : import cv2 as cv import numpy as np import matplotlib.pyplot as plt def showI…

正弦波拟合

正弦波拟合是一种常见的数学方法&#xff0c;用于确定最佳匹配给定数据集的正弦波形。这可以用于各种应用&#xff0c;如信号处理、周期性数据分析等。以下举例展示如何进行正弦波拟合。 步骤与方法 收集数据&#xff1a;首先&#xff0c;你需要收集或生成一组数据&#xff0…

食品信息管理系统java项目ssm项目springboot项目

食品信息管理系统java项目ssm项目springboot项目&#xff0c;增删改查均已实现&#xff0c;有批量删除 前端技术: JavaScript&#xff0c;Layui&#xff0c;Html5 后端技术: Java&#xff0c;MySql&#xff0c;Spring&#xff0c;Spring Mvc&#xff0c;SpringBoot&#xff0…

【代码随想录20】669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

目录 669.修剪二叉搜索树题目描述参考代码 108.将有序数组转换为二叉搜索树题目介绍参考代码 538.把二叉搜索树转换为累加树题目描述参考代码 669.修剪二叉搜索树 题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

2024.1.28 GNSS 学习笔记

1.基于 地球自转改正卫地距 以及 伪距码偏差 重构定位方程&#xff1a; 先验残差计算公式如下所示&#xff1a; 2.观测值如何定权&#xff1f;权重如何确定&#xff1f; 每个卫星的轨钟精度以及电离层模型修正后的误差都有差异&#xff0c;所以我们不能简单的将各个观测值等权…

2024.2.1日总结

web的运行原理&#xff1a; 用户通过浏览器发送HTTP请求到服务器&#xff08;网页操作&#xff09;。web服务器接收到用户特定的HTTP请求&#xff0c;由web服务器请求信息移交给在web服务器中部署的javaweb应用程序&#xff08;Java程序&#xff09;。启动javaweb应用程序执行…

(黑马出品_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_01&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术栈导学 1.认识微服务1.1.学习目标1.2.单体架构1.3.分布式架构1.4.微服务1.5.SpringCloud1.6.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示…

main函数、_tmain函数和wmain函数的区别

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 今天碰到一个问题&#xff0c;算是彻底搞明白了main函数、_tmain函数和wmain函数的区别。就是使用vs2015新建一个控制台工程&#xff0c;如果入口函数是设…

Maya------布尔 圆形圆角组件

17. maya常用命令7.布尔 圆形圆角组件_哔哩哔哩_bilibili 选中一个模型&#xff0c;再按shift加选另外一个模型 圆形圆角命令

STM32——SPI

STM32——SPI 1.SPI介绍 SPI是什么? SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#…

关于系统报错找不到X3DAudio1_7.dll怎么修复?总共有五个常见方案供你选择

通常情况下&#xff0c;当电脑尝试运行某些应用程序或游戏时&#xff0c;可能会遭遇“找不到x3daudio1_7.dll无法继续执行”的错误信息&#xff0c;这通常表明系统中缺少某个重要文件。为了理解这一问题&#xff0c;并寻找有效的解决方案&#xff0c;让我们先探讨为什么会发生这…

C++类和对象之进击篇

目录 1.类的6个默认成员函数2.构造函数2.1概念2.2特性 3.析构函数3.1概念3.2特性 4.拷贝构造函数4.1 概念4.2特征 5.赋值运算符重载5.1运算符重载5.2赋值运算符重载5.3前置和后置重载 6.日期类的实现7.const成员8.取地址及const取地址操作符重载 1.类的6个默认成员函数 如果一…

Versal Adaptive SoC Boards, Kits, and Modules

Versal™ AI Edge Series VEK280 Evaluation Kit https://www.xilinx.com/products/boards-and-kits/vek280.html#whatsInside The VEK280 Evaluation Kit, equipped with the AMD Versal™ AI Edge VE2802 adaptive SoC, offers AIE-ML and DSP hardware acceleration engin…

【HarmonyOS 4.0 应用开发实战】TypeScript入门之元组详讲

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

UE5.1_常用节点说明(经常忘记怎么用?)(常改)

UE5.1_常用节点说明&#xff08;经常忘记怎么用&#xff1f;&#xff09;&#xff08;常改&#xff09; 1. Gate——门节点。只有当门是Open状态才会执行Exit后面的代码。 Open开门&#xff1b;Close关门&#xff1b;Toggle开门和关门交替。 2. 关于控制ArmLength即控制相机前…

AD24-层叠的定义与添加(正片层与负片层)

一、叠层添加 1、设计-层叠管理器&#xff0c;进入层叠界面 2、一般添加红色框这两个 3、左侧绿色框勾上&#xff0c;表示每次添加两个层&#xff0c;去掉即添加一个层 4、名称修改 5、完成查看 二、正片层与负片层 1、定义 2、正片层&#xff08;所见即所得&#xff0c;看到…