華為上機題彙總(九)
注:編譯環境為Visual Studio 2012,答案僅供參考。
目錄
- 華為上機題彙總九
- 目錄
- 第四十一題
- 第四十二題
- 第四十三題
- 第四十四題
- 第四十五題
第四十一題
41.輸入m個字元串 和一個整數n, 把字元串M化成以N為機關的段,不足的位數用0補齊。
如 n=8 m=9 ,
123456789劃分為:12345678
90000000
123化為 :12300000
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int n;
cin >> n;
for (unsigned i = ; i < s.size(); i++)
{
cout << s[i];
if ((i+) % n == ) cout << " ";
}
int residual = s.size() % n;
if (!residual)
{
cout << endl;
return ;
}
for (int i = ; i < n - residual; i++)
{
cout << "0";
}
cout << endl;
return ;
}
第四十二題
42.整數化為2進制數,32位長度。然後逆序輸出
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(,);
int i = ;
while (n != )
{
v[i--] = n % ;
n /= ;
}
for (auto b = v.rbegin();b != v.rend();++b){
cout << *b;
}
cout << endl;
return ;
}
第四十三題
43.0-1背包問題
給定一個數,比如20
然後 再給定幾個數字 1 3 5 7 8
1 3 5 7 8
0 0 1 1 1
因為5+7+8=20
#include <iostream>
#include <vector>
using namespace std;
bool find(int value, int n, const vector<int> &v, vector<bool> &flags){
if (value == )
{
return true;
}
if ((value > && n <= ) || value < )
{
return false;
}
if (find(value - v[n-], n-, v, flags))
{
flags[n-] = ;
return true;
}
return find(value, n-, v, flags);
}
int main()
{
int value;
cin >> value;
vector<int> v;
vector<bool> flags;
int num;
while (cin >> num && num != )
{
v.push_back(num);
flags.push_back(false);
}
if (find(value, v.size(), v, flags))
{
for (unsigned i = ; i < flags.size(); i++)
{
cout << flags[i] << " ";
}
cout << endl;
return ;
}
cout << "ERRPR" << endl;
return ;
}
第四十四題
44.輸入整型數組求數組的最小數和最大數之和,例如輸入1,2,3,4則輸出為5,當輸入隻有一個數的時候,則最小數和最大數都是該數,例如隻輸入1,則輸出為2;另外數組的長度不超過50
#include <iostream>
#include <string>
using namespace std;
bool minAddMax(int a[], int n, int &result){
if (n <= || n > )
{
return false;
}
int min = a[], max = a[];
for (int i = ; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
}
if (a[i] > max)
{
max = a[i];
}
}
result = min + max;
return true;
}
int main()
{
int a[] = {,,,,};
int result = ;
cout << (minAddMax(a,,result) ? to_string(result) : "ERROR") << endl;
return ;
}
第四十五題
45.子串轉換:
将輸入的字元串(字元串僅包含小寫字母‘a’到‘z’),按照如下規則,循環轉換後輸出:a->b,b->c,…,y->z,z->a;若輸入的字元串連續出現兩個字母相同時,後一個字母需要連續轉換2次。例如:aa 轉換為 bc,zz 轉換為 ab;當連續相同字母超過兩個時,第三個出現的字母按第一次出現算。
要求實作函數:
void convert(char input,char output)
【輸入】 char *input , 輸入的字元串
【輸出】 char *output ,輸出的字元串
【傳回】 無
#include <iostream>
using namespace std;
void convert(char *input,char* output){
while (*input != '\0')
{
char *ahead = input + ;
if (*ahead == *input)
{
*output++ = ((*input++) - 'a' + ) % + 'a';
*output++ = ((*input++) - 'a' + ) % + 'a';
continue;
}
*output++ = ((*input++) - 'a' + ) % + 'a';
}
*output = '\0';
}
int main()
{
char input[],output[];
cin.getline(input,);
convert(input, output);
cout << output << endl;
return ;
}