華為機試——2018年校招
10號參加的華為的機試,這次的3道題難度適中。第一題字串,第二題貪心演算法,dp可以解,第三題長整數相乘。因為題主做過第三題原題,剛開始就把第三題秒了~~
然後開始做第一題,一般10分鐘就可以搞定。第二題要想一下,不過也差不多是原題,Leetcode上第55題jump game應該是此題原型。
因為都刷過幾乎是原題的原故,一個小時不到3題就AC完了
下面是完整題目和程式碼
一.給你一個原始字串,根據該字串內每個字元出現的次數,按照ASCII碼遞增順序重新調整輸出。
舉例!假設原始字串為
eeefgghhh
則每種字元出現的次數分別是
1.eee 3次 2.f 1次 3.gg 1次 4.hhh 3次
重新排序後輸出的字串如下:
efghegheh
編寫程式,實現上述功能。
【溫馨提示】
1.原始字串中僅可能出現“數字”和“字母”;
2.請注意區分字母大小寫。
#include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; int main(){ string str; int a[128]={0}; while (cin >> str){ for(int i=0;i<str.length();i++){ a[str[i]]++; } //caculate the number of each character int max = *max_element(a, a+128); sort(str.begin(),str.end()); long i =unique(str.begin(), str.end()) - str.begin();//the location of the "maxium number" character str=str.substr(0,i); for(int j=0;j<max;j++) for(int i=0;i<str.length();i++){ if(a[str[i]]){ cout<<str[i]; a[str[i]]--; } } cout <<endl; } return 0; }
二、給出一組正整數,你從第一個數向最後一個數方向跳躍,每次至少跳躍1格,每個數字的值表示你這個位置可以跳躍的最大長度。計算如何以最少的跳躍次數跳到最後一個數。
輸入描述:
第一行表示有多少個數n
第二行依次是1到n,一個數一行。
輸出描述:
輸出一行,表示跳躍最少的次數
#include <iostream> #include <cstdlib> #include <vector> #include <algorithm> //確定起點後,用一個指標指向最大跳躍點。 //搜尋最大跳躍點與起點之間能往後走的最遠的點,選定該點為起點,其最大跳躍點為終點。重複。 #define MAX 1000 using namespace std; //每次跳的最大長度為a[i]+i。 if(a[i] + i > stepMax){ //搜尋最大的跳躍點,記為index stepMax = a[i] +i; index =i; } if(i == end){ //搜尋完畢,從index(能跳最遠的位置)開始繼續跳 end = stepMax; ++count; i = index; } } return count; } int main() { int n; while (cin >> n){ int a[MAX]={0}; for(int i=0;i<n;i++){ cin >> a[i]; } cout <<jump(a, n); } }
二、編寫“常證書相乘”的程式,實現兩個任意長度的長整數(正數)相乘,輸出結果
這題就不多逼逼了,網上多的是答案。
#include<iostream>
using namespace std;
int multiply (string ma,string mb,string &strRst)
{
string chengshuA = ma;
string chengshuB = mb;
unsigned long a = chengshuA.length();
unsigned long b = chengshuB.length();
int strRst_length = 0;
unsigned long c = (a+1)*(b+1);
int *p = new int[c];
int *pA = new int[a];
int *pB = new int[b];
if ((a == 0) || (b == 0))
return -1;
for (int i = 0; i != c; i++)
p[i] = 0;
for (string::size_type index = 0; index != chengshuA.length(); index++)
pA[a-1-index] = chengshuA.at(index) - '0';
for (string::size_type index = 0; index != chengshuB.length(); index++)
pB[b-1-index] = chengshuB.at(index) - '0';
for (int temp_b = 0; temp_b != b; temp_b++)
{
for (int temp_a = 0; temp_a != a; temp_a++)
{
int temp = p[temp_a+temp_b] + pA[temp_a]*pB[temp_b];
p[temp_a+temp_b] = temp % 10;
int carry = temp/10;
int x = temp_a + temp_b +1;
while(carry != 0)
{
p[x] = p[x] + carry%10;
carry = carry/10;
x++;
}
}
}
while (c-- > 0)
{
if (p[c] != 0)
{
strRst_length = c + 1;
break;
}
}
char ch;
for (int i = strRst_length - 1; i >= 0 ; i--)
{
ch = p[i] + '0';
strRst.push_back(ch);
}
if (strRst.empty())
{
strRst = "0";
}
return 0;
}
int main(void)
{
string a ;
string b ;
while (cin >> a>>b){
string strRst = "\0";
multiply (a,b,strRst);
cout << strRst<<endl;
}
return 0;
}
相關推薦
華為機試——2018年校招
10號參加的華為的機試,這次的3道題難度適中。第一題字串,第二題貪心演算法,dp可以解,第三題長整數相乘。因為題主做過第三題原題,剛開始就把第三題秒了~~然後開始做第一題,一般10分鐘就可以搞定。第二題要想一下,不過也差不多是原題,Leetcode上第55題jump game
2016校招華為機試題目回憶1
題目一:根據指定的分隔符分隔字串,並輸出指定的段 描述 根據指定的分隔符分隔字串,並輸出指定的段。如果指定的段超過分隔的段數,輸出:NULL 舉例: AAA?BBB?CCC??2 字串為:AAA?BBB?CCC? 分隔符為:? 指定的段為:2
華為機試(2018年5月3日)
第一題 : C++程式:#include<iostream> #include<string> using namespace std; void main() { string str,
[華為機試練習題]2.大數求和
cout views 華為上機 大數 高位到低位 pretty 類別 ade iostream 題目二[大數求和] 描寫敘述: 給定兩個非常大的正整數A和B。位數在50至100之間。求C=A+B; 題目類別: 字符串 難度: 中級
2014華為機試(一)
ack cpp string.h ont const 機試題 輸出字符串 abcd 函數 2014華為機試(一)/****************************************************************************
華為機試-字符串匹配
輸入 scanner i++ -m 實現 ret 字符 als num 題目描述 題目標題: 判斷短字符串中的所有字符是否在長字符串中全部出現 詳細描述: 接口說明 原型: boolIsAllCharExist(char* pShortString,char* pLo
華為機試-密碼強度等級
java程序 strong while oid ont || ascii wds tro 題目描述 密碼按如下規則進行計分,並根據不同的得分為密碼進行安全等級劃分。 一、密碼長度: 5 分: 小於等於4 個字符 10 分: 5 到
[華為機試練習題]56.求子數組的最大和
== process ack turn 多個 popu 基礎 ace ava 題目 描寫敘述: 輸入一個整形數組。數組中連續的一個或多個整數組成一個子數組,每一個子數組都有一個和。求全部子數組的和的最大值。 接口 Int GetSub
華為機試—變形的楊輝三角形
mar ios alt mark word http processor string tex 變形的楊輝三角形 每一個數是上行,左右3個數之和,不存在為0,求第n行第一個偶數出現的位置,沒有輸出-1。 #include<iostrea
【華為機試】找最高分(通過此題熟悉牛客網Node輸入輸出)
length 輸出 ons ken [0 接下來 lin tput int 來源:牛客網 老師想知道從某某同學當中,分數最高的是多少,現在請你編程模擬老師的詢問。當然,老師有時候需要更新某位同學的成績. 輸入描述: 輸入包括多組測試數據。每組輸入第一行是兩個正整數N和M(0
華為機試:字串的連接最長路徑查找
too 小寫 while arrays 空間 i++ har cap over 這個題更應該叫做字符串字典序排序 題目描述 給定n個字符串,請對n個字符串按照字典序排列。 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字符串
華為機試:汽水瓶
方法 new code imp subject tint 表示 next quest 題目描述 有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空
【華為機試】—— 6.質數因子
string ner out system pre 分享 args 機試 分享圖片 題目 解法 import java.util.Scanner; public class Main { public static void main(Strin
華為機試練習
ace tor 排序 技術分享 length a-z string it! 計算 1. 計算字符個數 輸入 ABCDEF A 輸出 1 #include <iostream> #include <cstring> using n
華為機試 提取不重復的整數
des back 重復 mes 提取 push_back pan i++ -h 題目描述 輸入一個int型整數,按照從右向左的閱讀順序,返回一個不含重復數字的新的整數。 輸入描述: 輸入一個int型整數 輸出描述: 按照從右向左的閱讀順序,返回一個不含重復數字的新的整
牛客網 - 線上程式設計 - 華為機試 - 合併表記錄
題目描述 資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。 輸入描述: 先輸入鍵值對的個數 然後輸入成對的index和value值,以空格隔開 輸出描述: 輸出合併後的鍵值對(多
牛客網 - 線上程式設計 - 華為機試 - 字串字典順序排序
題目描述 給定n個字串,請對n個字串按照字典序排列。 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字串(字串長度≤100),字串中只含有大小寫字母。 輸出描述: 資料輸出n行,輸出結果為按照字典序排列的字串。 示例1
牛客網 - 線上程式設計 - 華為機試 - 刪除字串中出現次數最少的字元
題目描述 實現刪除字串中出現次數最少的字元,若多個字元出現次數一樣,則都刪除。輸出刪除這些單詞後的字串,字串中其它字元保持原來的順序。 輸入描述: 字串只包含小寫英文字母, 不考慮非法輸入,輸入的字串長度小於等於20個位元組。 輸出描述: 刪除字串中出現
牛客網 - 線上程式設計 - 華為機試 - 單詞倒排
題目描述 對字串中的所有單詞進行倒排。 說明: 1、每個單詞是以26個大寫或小寫英文字母構成; 2、非構成單詞的字元均視為單詞間隔符; 3、要求倒排後的單詞間隔符以一個空格表示;如果原字串中相鄰單詞間有多個間隔符時,倒排轉換後也只允許出現一個空格間隔符; 4、每個單詞最
牛客網 - 線上程式設計 - 華為機試 - 字串處理
題目描述 按照指定規則對輸入的字串進行處理。 詳細描述: 將輸入的兩個字串合併。 對合並後的字串進行排序,要求為:下標為奇數的字元和下標為偶數的字元分別從小到大排序。這裡的下標意思是字元在字串中的位置。 對排序後的字串進行操作,如果字元為‘0’——‘9’或者‘A’——‘F’