C/C++每日一练(20230309)

news2024/9/29 17:21:41

目录

1. 罗马数字转整数  ★

2. 最大数  ★★

3. 有效数字  ★★★

🌟 每日一练刷题专栏

C/C++ 每日一练 ​专栏

Python 每日一练 ​专栏


1. 罗马数字转整数

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个罗马数字,将其转为整数。

示例 1:

输入: "III"
输出: 3

示例 2:

输入: "IV"
输出: 4

示例 3:

输入: 9
输出: "IX"

示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V = 5, III = 3.

示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= num <= 3999

代码:

struct rmap
{
    char *r;
    int v;
    int l;
} units[] = {
    {(char*)"M", 1000, 1},
    {(char*)"CM", 900, 2},
    {(char*)"D", 500, 1},
    {(char*)"CD", 400, 2},
    {(char*)"C", 100, 1},
    {(char*)"XC", 90, 2},
    {(char*)"L", 50, 1},
    {(char*)"XL", 40, 2},
    {(char*)"X", 10, 1},
    {(char*)"IX", 9, 2},
    {(char*)"V", 5, 1},
    {(char*)"IV", 4, 2},
    {(char*)"I", 1, 1}};

#include <stdio.h>
#include <string.h>
int romanToInt(char *s)
{
    int len = strlen(s);
    char *end = s + len;
    int i = 0;
    int r = 0;
    while (i < 13)
    {
        if (end - s >= units[i].l && memcmp(s, units[i].r, units[i].l) == 0)
        {
            r += units[i].v;
            s += units[i].l;
        }
        else
            i++;
    }
    return r;
}

int main()
{
	printf("%d\n", romanToInt((char*)"III"));
	printf("%d\n", romanToInt((char*)"IV"));
	printf("%d\n", romanToInt((char*)"LVIII"));
	printf("%d\n", romanToInt((char*)"MCMXCIV"));
}

输出:

3
4
58
1994


2. 最大数

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:

输入:nums = [10,2]
输出:"210"

示例 2:

输入:nums = [3,30,34,5,9]
输出:"9534330"

示例 3:

输入:nums = [1]
输出:"1"

示例 4:

输入:nums = [10]
输出:"10"

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 10^9

代码:

#include <bits/stdc++.h>
using namespace std;

bool compare(string a, string b)
{
    string s1 = a + b;
    string s2 = b + a;
    return s1 > s2;
}
class Solution
{
public:
    string largestNumber(vector<int> &nums)
    {
        string res = "";
        int n = nums.size();
        vector<string> tmp;
        for (int i = 0; i < n; i++)
        {
            tmp.push_back(to_string(nums[i]));
        }
        sort(tmp.begin(), tmp.end(), compare);
        for (int i = 0; i < tmp.size(); i++)
        {
            res += tmp[i];
        }
        if ('0' == res[0])
        {
            return "0";
        }
        else
        {
            return res;
        }
    }
};

int main()
{
	Solution s;
	vector<int> nums = {10,2};
	cout << s.largestNumber(nums) << endl;
	
	nums = {3,30,34,5,9};
	cout << s.largestNumber(nums) << endl;
	
}

输出:

210
9534330


3. 有效数字

有效数字(按顺序)可以分成以下几个部分:

  1. 一个 小数 或者 整数
  2. (可选)一个 'e' 或 'E' ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 下述格式之一:
    1. 至少一位数字,后面跟着一个点 '.'
    2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    3. 一个点 '.' ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 至少一位数字

部分有效数字列举如下:

  • ["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]

部分无效数字列举如下:

  • ["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]

给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

示例 1:

输入:s = "0"
输出:true

示例 2:

输入:s = "e"
输出:false

示例 3:

输入:s = "."
输出:false

示例 4:

输入:s = ".1"
输出:true

提示:

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,或者点 '.' 。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
static bool isNumber(const char *s)
{
    while (*s == ' ')
        ++s;
    bool if_find_num = false;
    if (*s == '-' || *s == '+')
        ++s;
    while (isdigit(*s))
    {
        if_find_num = true;
        ++s;
    }
    if (*s == '.')
        ++s;
    while (isdigit(*s))
    {
        if_find_num = true;
        ++s;
    }
    if (if_find_num == true && *s == 'e')
    {
		++s;
		if (*s == '+' || *s == '-')
		    ++s;
		if_find_num = false;
		while (isdigit(*s))
		{
		    if_find_num = true;
		    ++s;
		}
    }
    while (*s == ' ')
        ++s;
    return *s == '\0' && if_find_num == true;
}

int main()
{
    printf("%s\n", isNumber("0089") ? "true" : "false");
    printf("%s\n", isNumber("-.6689") ? "true" : "false");
    printf("%s\n", isNumber("53.5e93") ? "true" : "false");

    printf("%s\n", isNumber("1a") ? "true" : "false");
    printf("%s\n", isNumber("99e2.5") ? "true" : "false");
    printf("%s\n", isNumber("-+3") ? "true" : "false");
	    
    return 0;
}

输出:

true
true
true
false
false
false


🌟 每日一练刷题专栏

 持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

 收藏,你的青睐是我努力的方向! 

✏️ 评论,你的意见是我进步的财富!  

C/C++ 每日一练 ​专栏

Python 每日一练 ​专栏

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

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

相关文章

达梦关系型数据库

达梦关系型数据库一、DM8 安装1. 安装包下载2. Docker 安装3. Linux 安装4. Windows 安装二、DM 管理工具三、命令行交互工具 DIsql四、DM8 SQL使用1. 创建模式2. 创建表3. 修改表4. 读写数据5. 查看库下所有的表名6. 查看表字段信息GitHub: link. 欢迎star国产自主研发的大型…

数据挖掘(2.2)--数据预处理

目录 二、数据描述 1.描述数据中心趋势 1.1平均值和截断均值 1.2加权平均值 1.3中位数&#xff08;Median&#xff09;和众数(Mode) 2.描述数据的分散程度 2.1箱线图 2.2方差和标准差 2.3正态分布 3.数据清洗 3.1数据缺失的处理 3.2数据清洗 二、数据描述 描述数…

自动化测试实战篇(9),jmeter常用断言方法,一文搞懂9种测试字段与JSON断言

Jmeter常用的断言主要有&#xff0c;JSON断言和响应断言这两种方式。 断言主要就是帮助帮助人工进行快速接口信息验证避免繁杂的重复的人工去验证数据 第一种响应断言Apply to&#xff1a;表示应用范围测试字段&#xff1a;针对响应数据进行不同的匹配响应文本响应代码响应信息…

【Go自学第一节】GoLang 数据类型

和Java类型&#xff0c;go拥有多种数据类型&#xff0c;可以把它分为四个大类基础类型、聚合类型、引用类型和接口类型 一、基本数据类型 基本数据类型又可以细分为&#xff1a;数字类型&#xff08;整型、浮点型&#xff09;、布尔类型、字符串类型 整型 Go 的整型分为有符号…

计算机网络的166个概念你知道几个 第十一部分

计算机网络数据链路层和物理层节点&#xff1a;一般指链路层协议中的设备。链路&#xff1a;一般把沿着通信路径连接相邻节点的通信信道称为链路。MAC 协议&#xff1a;媒体访问控制协议&#xff0c;它规定了帧在链路上传输的规则。奇偶校验位&#xff1a;一种差错检测方式&…

基于gin-vue-admin[gin+gorm]手动实现crud(全)

使用Gin-Vue- Admin框架手动实现crud 在gva框架下自己手动实现一个CRUD的操作&#xff0c;该操作将会结合gen进行探讨学习&#xff0c;具体实现可以看下面代码的实现&#xff0c;项目目录层级分为api层&#xff0c;service层&#xff0c;model层&#xff0c;common层&#xff…

1/4、1/2、整车悬架天棚主动控制仿真分析合集

目录 前言 1. 1/4悬架系统 1.1数学模型 1.2仿真分析 2. 1/2悬架系统 2.1数学模型 2.2仿真分析 3. 整车悬架系统 3.1数学模型 3.2仿真分析 4.总结 参考文献 前言 对于天棚控制相比大家不陌生&#xff0c;它是由美国的Karnopp提出&#xff0c;利用假设的与天棚固连…

【数据结构】链表相关题目(简单版)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; 初阶数据结构 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是…

软件测试10

Linux和数据库 1.Linux命令&#xff1a;软件测试第一个任务&#xff0c;一般都需要进行环境搭建&#xff0c;一部分环境搭建内容是在服务器上实现的&#xff0c;跟服务器交互需要使用Linux命令。&#xff08;因为Linux没有图形化页面&#xff09; 2.数据库&#xff1a;所有的软…

ccf-csp 202112-3登机牌条码

题目背景 西西艾弗岛景色优美&#xff0c;游人如织。但是&#xff0c;由于和外界的交通只能靠渡船&#xff0c;交通的不便严重制约了岛上旅游业的发展。西西艾弗岛管委会经过努力&#xff0c;争取到了一笔投资&#xff0c;建设了一个通用航空机场。在三年紧锣密鼓的主体建设后…

Jetpack Compose 中的动态加载、插件化技术探索

在传统的 Android 开发模式中&#xff0c;由于界面过分依赖于 Activity、Fragment这样的组件&#xff0c;一个业务模块中往往会存在着大量的 Activity 类&#xff0c;因此诞生了很多的插件化框架&#xff0c;这些插件化框架基本都是想方设法的使用各种Hook/反射手段来解决使用未…

c++11auto

autoc11中auto并不代表一种实际的数据类型&#xff0c;它只是一个类型声明的占位符&#xff0c;auto也并不是再所有场景下都能推导出变量的实际类型&#xff0c;使用auto不需要进行初始化&#xff0c;让编译器推导出它的实际类型&#xff0c;再编译阶段将auto占位符替换为真正的…

没有比这更详细的-压测工具Jmeter介绍及使用了

一、压测工具选型 1.1、前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试&#xff0c;他可以帮助我们发现系统中的瓶颈问题&#xff0c;减少发布到生产环境后出问题的几率&#xff1b;预估系统的承载能力&#xff0c;使我们能根据其做出一些应对措施。所以压力测…

【Linux基础篇】一、Linux入门基础命令

一、Linux基础命令 1、Linux的目录结构 /&#xff0c;根目录是最顶级的目录了Linux只有一个顶级目录&#xff1a;/路径描述的层次关系同样适用/来表示/home/itheima/a.txt&#xff0c;表示根目录下的home文件夹内有itheima文件夹&#xff0c;内有a.txt 2、ls命令 功能&#…

数字孪生GIS智慧风场Web3D可视化运维系统

随着国家双碳目标的实施&#xff0c;新能源发电方式逐渐代替了污染大气层的火力发电&#xff0c;其中风力发电相比于光伏发电具有能量密度高、发电小时数长、生命周期达20-25年之久等独特的优势。风能取之不尽、用之不竭&#xff0c;在新型能源互联网下&#xff0c;风力发电有可…

三、GC算法垃圾回收器

文章目录&#xff08;持续更新中... ...CMS and G1&#xff09;概述如何判断对象存活引用计数法根可达算法GC算法(垃圾回收算法)分代收集理论标记-清除算法复制算法标记-整理算法垃圾回收器概述Serial收集器Parallel收集器Parallel Old收集器CMS收集器G1收集器常用的收集器组合…

STM32实战项目-串口打印

前言&#xff1a; 本小结主要实现串口打印功能&#xff0c;主要将上一结的状态机运行次数&#xff0c;通过串口在串口终端上打印出来&#xff0c;硬件电路上主要是TTL转USB驱动电路&#xff0c;软件上主要有状态机函数&#xff0c;串口发送函数等调试工具是串口助手。 目录 1…

机器学习学习记录1:假设空间

我们可以把学习过程看作一个在所有假设组成的空间中进行搜索的过程&#xff0c;搜索目标是找到与训练集"匹配" 的假设&#xff0c;即能够将训练集中的瓜判断正确的假设.假设的表示一旦确定&#xff0c;假设空间及其规模大小就确定了.对于西瓜问题&#xff0c;这里我们…

[MySQL索引]2.索引的底层原理(一)

索引的底层原理&#xff08;一&#xff09;B-树索引B树索引tips: ​ 通过使用malloc/new来申请4字节的内存&#xff0c;但是操作系统不是说每一次用户申请4字节内存&#xff0c;我就只分配4字节&#xff0c;这样申请次数多了就要涉及频繁的用户态和内核态的切换&#xff0c;开销…

AM5728(AM5708)开发实战之安装Debian 10桌面操作系统

一 环境搭建 准备一个SD卡启动卡&#xff0c;能够正常引导板卡启动&#xff0c;后续会把Debian 10镜像安装到SD卡ext4分区 准备两个U盘&#xff0c;一个格式化成fat32文件系统&#xff0c;另一个格式化成ext4文件系统 下载Debian 10镜像&#xff0c;镜像名字为debian-10.4.0-a…