【華為機試線上訓練】Day 11
計算字串的相似度
題目描述
對於不同的字串,我們希望能有辦法判斷相似程度,我們定義了一套操作方法來把兩個不相同的字串變得相同,具體的操作方法如下:
1 修改一個字元,如把“a”替換為“b”。
2 增加一個字元,如把“abdd”變為“aebdd”。
3 刪除一個字元,如把“travelling”變為“traveling”。
比如,對於“abcdefg”和“abcdef”兩個字串來說,我們認為可以通過增加和減少一個“g”的方式來達到目的。上面的兩種方案,都只需要一次操作。把這個操作所需要的次數定義為兩個字串的距離,而相似度等於“距離+1”的倒數。也就是說,“abcdefg”和“abcdef”的距離為1,相似度為1/2=0.5.
給定任意兩個字串,你是否能寫出一個演算法來計算出它們的相似度呢?
請實現如下介面
/* 功能:計算字串的相似度
* 輸入:pucAExpression/ pucBExpression:字串格式,如: "abcdef"
* 返回:字串的相似度,相似度等於“距離+1”的倒數,結果請用1/字串的形式,如1/2
*/
public static String calculateStringDistance(String expressionA, String expressionB)
{
/* 請實現*/
return null;
}
約束:
1、PucAExpression/ PucBExpression字串中的有效字元包括26個小寫字母。
2、PucAExpression/ PucBExpression算術表示式的有效性由呼叫者保證;
3、超過result範圍導致資訊無法正確表達的,返回null。
輸入描述:
輸入兩個字串
輸出描述:
輸出相似度,string型別
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
string a, b;
while (cin >> a >> b)
{
string res = "1/";
int n = (int)a.size(), m = (int)b.size();
vector<vector<int>>dp(n + 1, vector<int>(m + 1, 0));
dp[0][0] = 0;//dp[x][y]代表將a字串前x個字元修改成b字串前y個字元
for (int i = 1; i <= m; ++i) dp[0][i] = i;
for (int i = 1; i <= n; ++i) dp[i][0] = i;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
int one = dp[i - 1][j] + 1, two = dp[i][j - 1] + 1, three = dp[i - 1][j - 1];
if (a[i - 1] != b[j - 1])
three += 1;
dp[i][j] = min(min(one, two), three);
}
}
res += to_string(1 + dp[n][m]);
cout << res << endl;
}
return 0;
}
參考:http://www.cnblogs.com/yujunyong/articles/2004724.html
判斷兩個IP是否屬於同一子網
題目描述
子網掩碼是用來判斷任意兩臺計算機的IP地址是否屬於同一子網路的根據。
子網掩碼與IP地址結構相同,是32位二進位制數,其中網路號部分全為“1”和主機號部分全為“0”。利用子網掩碼可以判斷兩臺主機是否中同一子網中。若兩臺主機的IP地址分別與它們的子網掩碼相“與”後的結果相同,則說明這兩臺主機在同一子網中。
示例:
I P 地址 192.168.0.1
子網掩碼 255.255.255.0
轉化為二進位制進行運算:
I P 地址 11010000.10101000.00000000.00000001
子網掩碼 11111111.11111111.11111111.00000000
AND運算
11000000.10101000.00000000.00000000
轉化為十進位制後為:
192.168.0.0
I P 地址 192.168.0.254
子網掩碼 255.255.255.0
轉化為二進位制進行運算:
I P 地址 11010000.10101000.00000000.11111110
子網掩碼 11111111.11111111.11111111.00000000
AND運算
11000000.10101000.00000000.00000000
轉化為十進位制後為:
192.168.0.0
通過以上對兩臺計算機IP地址與子網掩碼的AND運算後,我們可以看到它運算結果是一樣的。均為192.168.0.0,所以這二臺計算機可視為是同一子網路。
/*
* 功能: 判斷兩臺計算機IP地址是同一子網路。
* 輸入引數: String Mask: 子網掩碼,格式:“255.255.255.0”;
* String ip1: 計算機1的IP地址,格式:“192.168.0.254”;
* String ip2: 計算機2的IP地址,格式:“192.168.0.1”;
*
* 返回值: 0:IP1與IP2屬於同一子網路; 1:IP地址或子網掩碼格式非法; 2:IP1與IP2不屬於同一子網路
*/
public int checkNetSegment(String mask, String ip1, String ip2)
{
/*在這裡實現功能*/
return 0;
}
輸入描述:
輸入子網掩碼、兩個ip地址
輸出描述:
得到計算結果
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
char str[16] = {'\0'};
while (cin>>str)
{
int a[4] = { 0 }, b[4] = { 0 }, c[4] = { 0 };
char e[5] = { '\0' }, ch;
int i = 0, j = 0, k = 0, sign = 0;
for (i = 0;str[i] != '\0';i++)
{
if (str[i] == '.')
{
e[j] = '\0';
a[k] = stoi(e);
j = 0;
k++;
}
else
{
e[j] = str[i];
j++;
}
}
e[j] = '\0';
a[k] = stoi(e);
cin >> b[0] >> ch >> b[1] >> ch >> b[2] >> ch >> b[3];
cin >> c[0] >> ch >> c[1] >> ch >> c[2] >> ch >> c[3];
if (a[0] == 255 && a[1] == 0 && b[3] == 15)
sign = 1;
if (sign == 1)
cout << sign << endl;
else
{
for (i = 0;i < 4;i++)
{
if ((a[i] & b[i]) != (a[i] & c[i]))
sign = 2;
}
cout << sign << endl;
}
}
return 0;
}
相關文章
- 【華為機試線上訓練】Day 10
- 【華為機試線上訓練】Day 6
- 【華為機試線上訓練】Day 7
- 【華為機試線上訓練】Day 8
- 【華為機試線上訓練】Day 9
- 【華為機試線上訓練】Day1
- 【華為機試線上訓練】Day2
- 【華為機試線上訓練】Day3
- 【華為機試線上訓練】Day4
- 華為機試 (11/8)
- 華為部分線上測試題
- 演算法訓練day2演算法
- 【vjudge訓練記錄】11月個人訓練賽1
- day 11 – 2 裝飾器練習
- 雲端開爐,線上訓練,Bert-vits2-v2.2雲端線上訓練和推理實踐(基於GoogleColab)Go
- 2、PyTorch訓練YOLOv11—訓練篇(detect)—Windows系統PyTorchYOLOv1Windows
- 華為鯤鵬HCIA考試-練習05
- 華為freebuds耳機藍芽搜尋不到怎麼辦 華為freelace連線不上藍芽
- k線訓練營排名
- 史丹佛DAWNBench:華為雲ModelArts深度學習訓練全球最快深度學習
- 20240927 隨機訓練隨機
- 機率期望訓練
- CSAO×虎符安全訓練營 強強聯合,重磅上線
- 華為鯤鵬 DAY 4
- ECS 7天實踐訓練營-day1
- 手把手教你基於華為雲,實現MindSpore模型訓練模型
- 牛客網--華為機試題
- 華為機試-取近似值
- 華為雲在香港為大模型訓練推理提供即開即用澎湃算力大模型
- 教育培訓機構試水線上教育平臺搭建的可行性
- 華為昇騰訓練營筆記-Ascend C運算元開發筆記
- 小雞老師華為版終於上線華為應用市場
- 線上教育培訓機構如何推廣自己
- 華為機試題刷題總結
- 華為手機如何連線到電腦
- 新方案上線,華為為何加碼雲遊戲?遊戲
- MinIO線上故障演練
- 與其感慨模型難訓練,不如試試 AutoNLP模型