1. 程式人生 > >牛客網三道程式設計題(五) 之華為機試線上訓練(四)進位制轉換、刪除重複出現的數字、句子逆序

牛客網三道程式設計題(五) 之華為機試線上訓練(四)進位制轉換、刪除重複出現的數字、句子逆序

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;
}