C/C++每日一练(20230413)
目录
2. 比较版本号 🌟🌟
1. 与浮点数A最接近的分数B/C
已知一个浮点数A(0<A<5),求它由哪两个整数B/C相除的值最接近,有相同值时要求B最小
例如:
A=0.2
B=1 C=5
以下程序实现了这一功能,请你填补空白处内容:
```c++
#include <stdio.h>
#include <math.h>
int main()
{
float A = 0.2f;
int x = 0;
if (A < 0)
{
x = 1;
A = 1 / A;
}
float delta = 1;
int B = 1, C = 1;
do
{
____________;
} while (delta > 0.000001);
if (x == 0)
printf("%d / %d", C, B - 1);
else
printf("%d / %d", B - 1, C);
return 0;
}
```
出处:
https://edu.csdn.net/practice/25454313
代码:
#include <stdio.h>
#include <math.h>
int main()
{
float A = 0.3333f;
int x = 0;
if (A < 0)
{
x = 1;
A = 1 / A;
}
float delta = 1;
int B = 1, C = 1;
do
{
C = (int)(B * A);
delta = fabs(C / (float)B - A);
B++;
} while (delta > 0.000001);
if (x == 0)
printf("%d / %d", C, B - 1);
else
printf("%d / %d", B - 1, C);
return 0;
}
输出:
略
2. 比较版本号
给你两个版本号 version1
和 version2
,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个 '.'
连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33
和 0.1
都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1
和修订号 001
相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0
。例如,版本 1.0
小于版本 1.1
,因为它们下标为 0
的修订号相同,而下标为 1
的修订号分别为 0
和 1
,0 < 1
。
返回规则如下:
- 如果
version1 > version2
返回1
, - 如果
version1 < version2
返回-1
, - 除此之外返回
0
。
示例 1:
输入:version1 = "1.01", version2 = "1.001" 输出:0 解释:忽略前导零,"01" 和 "001" 都表示相同的整数 "1"
示例 2:
输入:version1 = "1.0", version2 = "1.0.0" 输出:0 解释:version1 没有指定下标为 2 的修订号,即视为 "0"
示例 3:
输入:version1 = "0.1", version2 = "1.1" 输出:-1 解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2
示例 4:
输入:version1 = "1.0.1", version2 = "1" 输出:1
示例 5:
输入:version1 = "7.5.2.4", version2 = "7.5.3" 输出:-1
提示:
1 <= version1.length, version2.length <= 500
version1
和version2
仅包含数字和'.'
version1
和version2
都是 有效版本号version1
和version2
的所有修订号都可以存储在 32 位整数 中
出处:
https://edu.csdn.net/practice/25454314
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
int compareVersion(string version1, string version2)
{
int val1, val2;
int idx1 = 0, idx2 = 0;
while (idx1 < version1.length() || idx2 < version2.length())
{
val1 = 0;
while (idx1 < version1.length())
{
if (version1[idx1] == '.')
{
++idx1;
break;
}
val1 = val1 * 10 + (version1[idx1] - '0');
idx1++;
}
val2 = 0;
while (idx2 < version2.length())
{
if (version2[idx2] == '.')
{
idx2++;
break;
}
val2 = val2 * 10 + (version2[idx2] - '0');
idx2++;
}
if (val1 > val2)
return 1;
if (val1 < val2)
return -1;
}
return 0;
}
};
int main()
{
Solution s;
string version1 = "1.01", version2 = "1.001";
cout << s.compareVersion(version1, version2) << endl;
version1 = "1.0"; version2 = "1.0.0";
cout << s.compareVersion(version1, version2) << endl;
version1 = "0.1"; version2 = "1.1";
cout << s.compareVersion(version1, version2) << endl;
version1 = "1.0.1"; version2 = "1";
cout << s.compareVersion(version1, version2) << endl;
version1 = "7.5.2.4"; version2 = "7.5.3";
cout << s.compareVersion(version1, version2) << endl;
return 0;
}
输出:
0
0
-1
1
-1
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
示例 4:
输入: s = "" 输出: 0
提示:
0 <= s.length <= 5 * 10^4
s
由英文字母、数字、符号和空格组成
以下程序实现了这一功能,请你填补空白处内容:
```c++
int hset[128];
int lengthOfLongestSubstring(char *s)
{
int i = 0, j = 0;
int m = 0;
memset(hset, 0, sizeof hset);
for (; s[j]; j++)
{
___________________;
}
return m;
}
```
出处:
https://edu.csdn.net/practice/25454315
代码:
#include <bits/stdc++.h>
using namespace std;
int hset[128];
int lengthOfLongestSubstring(char *s)
{
int i = 0, j = 0;
int m = 0;
memset(hset, 0, sizeof hset);
for (; s[j]; j++)
{
i = hset[s[j]] > i ? hset[s[j]] : i;
m = m > j - i + 1 ? m : j - i + 1;
hset[s[j]] = j + 1;
}
return m;
}
int main()
{
char *s = "abcabcbb";
cout << lengthOfLongestSubstring(s) << endl;
char *s2 = "bbbbb";
cout << lengthOfLongestSubstring(s2) << endl;
char *s3 = "pwwkew";
cout << lengthOfLongestSubstring(s3) << endl;
return 0;
}
输出:
3
1
3
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |
相关文章
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- C#调用c++的动态库dll演示例程
- C/C++每日一练(20230417)
- C/C++每日一练(20230412)
- C/C++每日一练(20230411)
- C/C++每日一练(20230401)
- C/C++每日一练(20230321)
- C/C++每日一练(20230316)
- C/C++每日一练(20230220)
- C/C++每日一练(20230308)
- C/C++每日一练(20230307)
- C/C++每日一练(20230410) 二叉树专场(4)
- [C++ 面试基础知识总结] 顺序容器
- C++中的stack类、QT中的QStack类
- C++每日面试之算法训练 寻找数组中最大值
- C++每日面试之delete this 合法吗?
- C++每日面试之引用
- C++每日面试之decltype(转)
- C++每日面试之struct 和 class
- C++每日面试之this 指针
- 一步一步的理解C++STL迭代器
- C++之默认参数顺序(从右到左)和调用顺序(从左到右)(一百一十二)
- C++使用ShellExecute打开目标文件所在文件夹并选中目标文件
- C++标准库 -- 泛型算法 (Primer C++ 第五版 · 阅读笔记)