華為上機題彙總(五)

2021-12-29 20:52:53 字數 4661 閱讀 3424

21.通過鍵盤輸入100以內正整數的加、減表示式,請編寫乙個程式輸出運算結果字串。

輸入字串的格式為:「運算元1 運算子 運算元2」,「運算元」與「運算子」之間以乙個空格隔開。

補充說明:

1. 運算元為正整數,不需要考慮計算結果溢位的情況。

2. 若輸入算式格式錯誤,輸出結果為「0」。

示例輸入:「4 + 7」 輸出:「11」

輸入:「4 - 7」 輸出:「-3」

輸入:「9 ++ 7」 輸出:「0」 注:格式錯誤

#include

#include

#include

using namespace std;

bool isnumber(const string &s , int &num)

sum += (*begin - '0') * pow(10,begin - s.rbegin());

}num = sum;

return true;

}int caculate(const string &s)

string tmp(begin,ahead);

v.push_back(tmp);

if (ahead != s.end()) ahead++;

begin = ahead;

}if (v.size() != 3) return 0;

int num1,num2;

if (!isnumber(v[0],num1) || !isnumber(v[2],num2) || v[1].size() != 1) return 0;

if (v[1] == "+")

else if (v[1] == "-")

return 0;

}int main()

22.ip位址匹配(60分)

問題描述:

在路由器中,一般來說**模組採用最大字首匹配原則進行目的埠查詢,具體如下:

ip位址和子網位址匹配:

ip位址和子網位址所帶掩碼做and運算後,得到的值與子網位址相同,則該ip位址與該子網匹配。

比如:ip位址:192.168.1.100

子網:192.168.1.0/255.255.255.0,其中192.168.1.0是子網位址,255.255.255.0是子網掩碼。

192.168.1.100&255.255.255.0 = 192.168.1.0,則該ip和子網192.168.1.0匹配

ip位址:192.168.1.100

子網:192.168.1.128/255.255.255.192

192.168.1.100&255.255.255.192 = 192.168.1.64,則該ip和子網192.168.1.128不匹配

最大字首匹配:

任何乙個ipv4位址都可以看作乙個32bit的二進位制數,比如192.168.1.100可以表示為:11000000.10101000.00000001.01100100,

192.168.1.0可以表示為11000000.10101000.00000001.00000000

最大字首匹配要求ip位址同子網位址匹配的基礎上,二進位制位從左到右完全匹配的位數盡量多(從左到右子網位址最長)。比如:

ip位址192.168.1.100,同時匹配子網192.168.1.0/255.255.255.0和子網192.168.1.64/255.255.255.192,

但對於子網192.168.1.64/255.255.255.192,匹配位數達到26位,多於子網192.168.1.0/255.255.255.0的24位,

因此192.168.1.100最大字首匹配子網是192.168.1.64/255.255.255.192。

請程式設計實現上述最大字首匹配演算法。

要求實現函式:

void max_prefix_match(const char *ip_addr, const char *net_addr_array, int *n)

【輸入】ip_addr:ip位址字串,嚴格保證是合法ipv4位址形式的字串

net_addr_array:子網位址列表,每乙個字串代表乙個子網,包括子網位址和掩碼,

表現形式如上述,子網位址和子網掩碼用』/』分開,嚴格保證是

合法形式的字串;如果讀到空字串,表示子網位址列表結束

【輸出】n:最大字首匹配子網在*net_addr_array陣列中對應的下標值。如果沒有匹配返回-1

示例輸入:

ip_addr = 「192.168.1.100」

net_addr_array =

輸出:n = 2

#include

#include

#include

using namespace std;

void convert(const char *ip,vector &v)

string tmp(begin,ahead);

v.push_back(stoi(tmp));

if (*ahead == '\0') break;

begin = ++ahead;

}}int match(const char *ip, const char *net)

}int matchbyte = 0;

for (int i = 0; i < 4; i++)

int tmp = vip[i] ^ vnet[i];

int index = 0;

for (int i = 7; i > 0; i--)

tmp >>= 1;

}matchbyte += index;

break;

}return matchbyte;

}void max_prefix_match(const char *ip_addr, const char *net_addr_array, int *n)

index++;

}*n = maxindex;

}int main()

; int n = 0;

max_prefix_match(ip_addr,net_addr_array,&n);

cout << n << endl;

return 0;

}23.編寫乙個程式,實現排序演算法,從小到大輸出,數字間以逗號分隔,所有數字為非負整數。數目小於1028;

輸入:1,6,3,5

輸出:1,3,5,6

#include

#include

#include

#include

using namespace std;

void sortstr(const string &input, string &output)

string tmp(begin,ahead);

v.push_back(stoi(tmp));

if (ahead == input.end()) break;

begin = ++ahead;

}sort(v.begin(),v.end());

auto vbegin = v.begin();

while (vbegin != v.end())

}}int main()

24.我們把只包含因子2,3,5的數稱為醜數,把1當作第乙個醜數,求從小到大的第n個醜數

輸入:1都500之間的整數(包含1和500)

輸出:第n個醜數。不在1-500輸出-1

#include

#include

using namespace std;

int min(int a, int b , int c)

int findarglynum(int n)

vector v(n,1);

int pos2 = 0, pos3 = 0, pos5 = 0;

for (int i = 1; i < n; i++)

if (v[i] == 3*v[pos3])

if (v[i] == 5*v[pos5])

}return v[n-1];

}int main()

n個城市(n<=10),從0到9編號,城市間要麼有路,要麼沒路,計算城市a到b之間到底有多少條路。

輸入:n a b(1 輸出:a到b有多少條路

輸入:3 0 2

1 1 1

1 1 1

1 1 1

輸出:2

#include

#include

using namespace std;

bool canvisit(int index, vector hasvisited)

}return true;

}int findway(int start, int end, int n, vector hasvisited, vector> road)

int sum = 0;

vector v = road[start];

for (int i = 0; i < n; i++)

}return sum;

}int main()

road.push_back(v);

}vector hasvisited;

hasvisited.push_back(a);

cout << findway(a,b,n,hasvisited,road) << endl;

return 0;

}

華為上機題彙總(二十二)

106.去飯店吃飯 乙個男人3元 乙個女人2元 乙個小孩1元 現輸入總人數和總花費 include include using namespace std void display const vector v cout man woman child endl void compute int n...

華為校招上機題

1.兔子爬洞問題 兔子白天爬出5公尺,晚上又掉下去2公尺。問給定洞的深度,兔子要爬多少天 include includeusing namespace std int str2int const char str int main int argc,char argv temp temp 10 st...

華為上機第二題

輸入 n a b n表示有多少個城市,a表示要出發的城市,b表示要到達的城市 接著輸入n n的矩陣,表示任意兩個城市是否連通,連通用1表示,否則用0表示 如 3 0 2 1 1 1 1 1 1 1 1 1 輸出 從a到b共有多少條路。include include using namespace s...