牛客網三道程式設計題(五) 之華為機試線上訓練(四)進位制轉換、刪除重複出現的數字、句子逆序
阿新 • • 發佈:2019-01-10
1、進位制轉換
這一題利用 cout 的流輸出,非常簡單。不需要再根據下標啥的,再乘以16 或者除以16啥的。請注意: 1)利用 cout 流輸出的,都是字串,不管它是不是數字。 2)cout 預設輸出的是十進位制。此外,如果是八進位制,是 cout << oct << a;
2、提取不重複的整數。
程式碼如下:
#include<iostream> using namespace std; int main() { int num, result = 0; cin >> num; int a[10] = { 0 }; while (num != 0) { if (a[num % 10] == 0) // 說明第一次出現 { a[num % 10] = 1; result = result * 10 + num % 10; } num = num / 10; } cout << result; }
說明:這樣程式設計比較巧妙,如果第一次出現,就記錄一下標誌。只有當第一次出現時,才把它加到 result 裡面。如果把題目改一下的話:把重複出現的數字全部刪除掉,那麼程式可以這樣修改。
int main() { int num,num_temp,result = 0; cin >> num; num_temp = num; int a[10] = {0}; while (num != 0) { a[num % 10]++; //記錄一下出現多少次 num = num / 10; } while (num_temp != 0) { if (a[num_temp % 10] == 1) //出現一次就加上去, { result = result * 10 + num_temp % 10; // 當然了,可以不用累加。可以每次只輸出一個數字。 num_temp = num_temp / 10; } else { num_temp = num_temp / 10; // 出現一次以上直接忽略 } } cout << result; return 0; }
3、將句子逆序
非常簡單,兩分鐘搞定程式如下:
#include <iostream> #include <string> #include <vector> using namespace std; int main() { vector<string> vecs; string s; while (cin >> s) { vecs.push_back(s); } for (decltype(vecs.size()) i = vecs.size() - 1; i > 0; --i) { cout << vecs[i] << " "; } cout << vecs[0]; return 0; }