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

简介: C/C++每日一练(20230413)

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. 比较版本号

给你两个版本号 version1version2 ,请你比较它们。


版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 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

目录
相关文章
|
2月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
71 1
Linux 终端操作命令(1)
|
2月前
|
算法 Java Go
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
30 1
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
|
2月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
35 0
Linux 终端命令之文件浏览(4) head, tail
|
2月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
53 0
Linux 终端操作命令(3)内部命令用法
|
2月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
127 0
Linux系统部署Python语言开发运行环境
|
2月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
66 0
Go语言time库,时间和日期相关的操作方法
|
2月前
|
C++ 存储 Serverless
力扣C++|一题多解之数学题专场(2)
力扣C++|一题多解之数学题专场(2)
33 0
力扣C++|一题多解之数学题专场(2)
|
2月前
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
53 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
2月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
41 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
2月前
|
Java Go C++
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
32 0
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort