1. 与浮点数A最接近的分数B/C
已知一个浮点数A(0<A<5),求它由哪两个整数B/C相除的值最接近,有相同值时要求B最小
例如:
1. A=0.2 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