梦熊杯-十二月月赛-白银组题解-A.自由

news2024/9/20 20:52:12

A. Problem A.自由(freedom.cpp)

内存限制:256 MiB

时间限制:1000 ms

标准输入输出

题目类型:传统

评测方式:文本比较

题目描述:

「蒙德」是「自由」的国度。

巴巴托斯认为,如果一个数的所有数位上的数的乘积是0,那么这个数就是一个「自由数」。

现在给你一个整数n ,他希望你判断出 n 是否为「自由数」。

输入格式:

一个整数n 。

输出格式:

一个字符串,若  为「自由数」则输出 YES,反之输出 NO

样例:

【样例 1 输入】

520

【样例 1 输出】

YES

【样例 2 输入】

1314

【样例 2 输出】

NO

数据范围与提示:

【样例解释 #1】 

520 的所有数位上的数的乘积是0 ,所以 520 是一个「自由数」。

【样例解释 #2】

 1314的所有数位上的数的乘积是12 ,所以 1314 不是一个「自由数」。

【数据范围】

对于 70% 的数据,保证 1<=n<=10^9。

对于 100% 的数据,保证 1<=n<=10^18 。

思路:

  1.整数:

    我们先来说第一种思路,因为题目的数据范围最大是10^18次方,必须要用long long才可以存下来,我们定义一个long long类型的整数 n,然后进行输入。

    接下来,我们需要求出这个整数n的各位数的乘积,先定义一个long long类型的整数sum,将其初始化为1(代表的是各位数的乘积,要从1开始),之后我们要求出n的各位数是什么,然后依次和sum乘起来。

   可以进行一次while循环,我们知道将n%10之后的值就是n这个数的个位数上的数,求出这个数之后,和sum乘起来,因为这个数已经乘过了,不需要了,我们就可以将n/10,那么n的个位数就变成了原来n的十位数,然后依次这样操作,直到n为0为止。

  然后进行判断,如果sum为0的话,就输出YES,否则输出NO.

  2.整数优化:

  我们现在对我们的第一种思路进行一次优化,怎么优化呢?

  我们知道,只要这个数的各位数乘积为0,这个数就是自由数,那这个数的各位数乘积为什么会为0呢?只要这个数的各位数中有一个数为0,那么乘了0之后,sum也会变成0,之后乘以任何数都是为0.

  那我们就只需要判断n的各位数中有没有0,我们现在不需要定义sum,直接进行思路1里面的while循环,判断这个n%10数是不是等于0,等于的话,输出YES,然后直接return 0;结束程序。

  如果这个while循环都结束了,还没有各位数是0的,那么就代表n的各位数乘积不可能为0,就可以直接输出NO。

  3.字符串(效率高于思路2)

  现在我们如果想要比思路2更高的效率,就可以运用到字符串了。

  我们知道,输出的数最大是10^18次方,如果换成字符串的话,就是最大就是输入一个长度为18的字符串数组,输入一个字符串数组的话,我们可以用cin里面的函数getline来进行输入,参数为(char *a"要输入的字符串",int t"我们要输入的字符串的最大长度");

  输入之后,我们可以运用strlen函数求取字符串n的长度t,现在在字符串里面,下标0~t-1分别存着我们输入的整数的各位数的数字,现在我们只需要for循环遍历一遍就可以了,在循环里面判断a[i]是否为0,是的话就输出YES,然后结束。循环结束后,代表各位数里面没有一个数是0,所以不是自由数,输出NO。

  这样的话,效率就高于思路2(思路2的while循环和思路3的遍历复杂度一样,但是while循环中有两次计算一次判断,for循环中只有一个判断)(虽说效率没有高太多)

代码:

  1.整数代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n,sum=1;
	cin>>n;
	while(n!=0){
		sum*=n%10;
		n/=10;
	}
	if(sum==0)
	  cout<<"YES"<<endl;
	else
	  cout<<"NO"<<endl;
	return 0;
}

  2. 整数优化代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n;
	cin>>n;
	while(n!=0){
		if(n%10==0){
			cout<<"YES"<<endl;
			return 0;
		}
		n/=10;
	}
	cout<<"NO"<<endl;
	return 0;
}

  3.字符串代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	char a[100];
	cin.getline(a,100);
	int t=strlen(a);
	bool f=false;
	for(int i=0;i<t;i++){
		if(a[i]=='0'){
			f=true;
			break;
		}
	}
	if(f)
	  cout<<"YES"<<endl;
	else
	  cout<<"NO"<<endl;
	return 0;
}

总结:

  这第一种思路不难想到,但是我们需要求巧来进行优化。(虽然这三份代码都可以AC)

题目链接:

 登录 - 梦熊联盟icon-default.png?t=MBR7http://mna.wang/contest/50/problem/1 

 

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

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

相关文章

ch1_2 计算机的基本组成

计算机的基本组成 1. 冯 诺依曼计算机的特点 计算机由五大部件组成指令和数据 以同等地位 存于存储器&#xff0c; 可按地址寻访。指令和数据用二进制 表示指令由操作码 和 地址码 组成&#xff1b;存储程序&#xff1b;以运算器 为中心&#xff1b; 2. 硬件框图 存储器&am…

【Java集合】HashSet源码分析

目录 一、Set简介 二、HashSet简介 2.1 简介 2.2 HashSet继承关系 三、源码分析 3.1 成员属性 3.2 构造方法 3.3 添加元素 3.3.1 add()方法 3.3.2 addAll()方法 3.4 删除元素 3.4.1 remove()方法 3.4.2 removeAll()方法 3.5 查询元素 3.5.1 contains()方法 3.5.2 containsAll方…

项目管理:如何编写高质量的Makefile?

文章目录背景熟练掌握 Makefile 语法规划 Makefile 要实现的功能设计合理的 Makefile 结构掌握 Makefile 编写技巧技巧 1&#xff1a;善用通配符和自动变量技巧 2&#xff1a;善用函数技巧 3&#xff1a;依赖需要用到的工具技巧 4&#xff1a;把常用功能放在 /Makefile 中&…

nodeJS - 切换使用淘宝镜像【临时切换、 长期切换】

一、文章引导 #mermaid-svg-zWQadgqvTsLhAes4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zWQadgqvTsLhAes4 .error-icon{fill:#552222;}#mermaid-svg-zWQadgqvTsLhAes4 .error-text{fill:#552222;stroke:#55222…

自动驾驶感知——视觉感知经典算法

文章目录1. 车道线检测技术1.1 基于规则的车道线检测技术1.1.1 流程框架1.1.2 预处理模块1.1.3 车道线识别感兴趣区域提取1.1.4 灰度图转化1.1.5 灰度图去噪1.1.6 二值化操作1.1.7 鲁棒性参数估计——RANSAC1.1.8 后处理模块1.1.9 输出1.2 车道线检测技术发展路线2. 目标检测技…

10.图和树基础

一、基本介绍 1.图 图描述的是一些个体之间的关系。这些个体之间既不是前驱后继的顺序关系&#xff0c;也不是祖先后代的层次关系&#xff0c;而是错综复杂的网状关系。我们一般用图G(V,E)G(V,E)G(V,E)来表示&#xff0c;VVV表示结点&#xff0c;EEE表示边。 根据边是否有权值…

爱快软路由安装Docker插件

在爱快云 插件应用中开启Docker插件 在爱快web端页面的[系统设置]->[磁盘管理]->[磁盘分区]设置磁盘分区&#xff0c;选择普通存储&#xff0c;挂载路径名可以随便取。 点击[高级应用]->[插件管理] 点击页面的Docker图标。 启用Docker服务 点击中间的[镜像管理]&…

n皇后问题

n皇后问题 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行 或同一列 或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的…

基于java的大理旅游系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

professional issue复习

Legal concepts Development of UK law • The Kingdom of England was established in 927. • The Principality of Wales was established in 1216. Common law • Following 1066, a unified system of law (English common law) slowly came into existence. It was “c…

漫谈cgroup

什么是cgroup cgroup 是linux内核的一个功能&#xff0c;用来限制、控制与分离一个进程组的资源&#xff08;如CPU、内存、磁盘I/O等&#xff09;。它是由 Google 的两位工程师进行开发的&#xff0c;自 2008 年 1 月正式发布的 Linux 内核 v2.6.24 开始提供此能力。 cgroup …

代码随想录算法训练营第30天 二叉树 java :39. 组合总和 40.组合总和II 131.分割回文串

文章目录LeetCode 39. 组合总和本题题解思路LeetCode 40.组合总和II本题题解思路LeetCode 131.分割回文串本题题解思路那么在代码里什么是切割线呢&#xff1f;那么在代码里什么是切割线呢&#xff1f;总结LeetCode 39. 组合总和 本题题解 思路 根据递归三部曲来分析 递归函…

单板硬件设计:存储器

在单板设计中&#xff0c;无论是涉及到一个简易的CPU、MCU小系统或者是复杂的单板设计&#xff0c;都离不开存储器设计&#xff1a; 1、存储器介绍 存储器的分类大致可以划分如下&#xff1a; ROM和RAM指的都是半导体存储器&#xff0c;ROM在系统停止供电的时候仍然可以保持…

visudo配置sudo权限

visudo配置sudo权限配置visudo仅允许字符终端登陆(tty)--授权localhost允许图形和tty登陆--授权all用户组提权-示例配置在sudoers.d目录下创建授权文件--推荐五段式配置三段式配置检查sudoers配置是否有误如何在sudo运行的命令中防止使用参数结果验证配置visudo https://blog.…

【数据结构】8.2 插入排序

文章目录前言1. 直接插入排序直接插入排序算法直接插入排序性能分析2. 折半插入排序3. 希尔排序希尔排序算法希尔排序算法分析排序方法比较前言 类似于俺们打牌时的插入&#xff0c;每抓来一张牌的时候&#xff0c;就将它放在合适的位置上&#xff0c;插入一张牌之后手里的牌仍…

MQ相关概念

1) 队列管理器 队列管理器是MQ系统中最上层的一个概念&#xff0c;由它为我们提供基于队列的消息服务。 2) 消息 在MQ中&#xff0c;我们把应用程序交由MQ传输的数据定义为消息&#xff0c;我们可以定义消息的内容并对消息进行广义的理解&#xff0c;比如&#xff1a;用户的各种…

JavaWeb-FilterListener

JavaWeb-Filter&Listener 1&#xff0c;Filter 1.1 Filter概述 Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 如下图所示&#xff0c;浏览器可以访问服…

JAVA性能统计项目

一、项目背景&#xff1a;我们希望设计开发一个小的框架&#xff0c;能够获取接口调用的各种统计信息&#xff0c;比如&#xff0c;响应时间的最大值&#xff08;max&#xff09;、最小值&#xff08;min&#xff09;、平均值&#xff08;avg&#xff09;、百分位值&#xff08…

力扣OJ(2000+)

目录 2032. 至少在两个数组中出现的值 2037. 使每位学生都有座位的最少移动次数 2042. 检查句子中的数字是否递增 2097. 合法重新排列数对 2180. 统计各位数字之和为偶数的整数个数 2185. 统计包含给定前缀的字符串 2283. 判断一个数的数字计数是否等于数位的值 2287. …

基于MBD 的软件品质保证技术

基于MBD的软件是什么&#xff1f; 基于MBD的软件是基于模型开发的软件&#xff0c;主要应用于汽车、电子电气、机器人、航空、航天等行业。 ​​​ 与使用现有代码开发程序的方法不同&#xff0c;MBD 方法包括首先开发模型&#xff0c;将模型转换为代码&#xff0c;然后基于转换…