筆試題《最好一樣》

時間限制:C/C++語言1000MS;其他語言3000MS

內存限制:C/C++語言131072KB;其他語言655360KB

題目描述:

給出一個序列包含n個正整數的序列A,然後給出一個正整數x,你可以對序列進行任意次操作,每次操作你可以選擇序列中的一個數字,讓其與x做按位或運算。你的目的是讓這個序列中的衆數出現的次數最多。請問衆數最多出現多少次?

輸入:

輸入第一行僅包含兩個正整數n和x,表示給出的序列的長度和給定的正整數。

(1<=n<=100000,1<=x<=1000)

接下來一行有n個正整數,即這個序列,中間用空格隔開。(1<=a_i<=1000)

輸出:

輸出僅包含一個正整數,表示衆數最多出現的次數。

樣例輸入:

5 2

3 1 3 2 5

樣例輸出:

3

代碼:

#include <iostream>
using namespace std;
#include <algorithm>
#include <string>
#include <time.h>

// 十進制轉二進制
// 參考https://www.cnblogs.com/zwjjj/p/9953718.html
string intToA(int n, int radix)    //n是待轉數字,radix是指定的進制
{
	string ans = "";
	do {
		int t = n % radix;

		if (t >= 0 && t <= 9)
		{
			ans += t + '0';
		}
		else
		{
			ans += t - 10 + 'a';
		}

		n /= radix;
	} while (n != 0);    //使用do{}while()以防止輸入爲0的情況
	reverse(ans.begin(), ans.end());
	return ans;
}

int main(void)
{
	
	//cout << (2 | 5) << endl;
	/**************************  一.接受數據  **************************/
	int n; // 輸入的長度與
	int x; // 輸入的正整數

	// 接收第一行輸入
	cin >> n;
	cin >> x;

	// 第二行輸入用動態數組接收
	int* array = new int[n];

	// 循壞接收序列
	for (int i = 0; i < n; i++)
	{
		cin >> array[i];
	}

	// 測試輸入
	/*for (int i = 0; i < n; i++)
	{
		cout << array[i] << " ";
	}
	cout << endl;*/
	long start = clock();  //開始時間
	/**************************  二.找到衆數  **************************/
	// 1. 排序接受的數組
	sort(array, array + n);

	// 2. 在從小到大排序的數組中找出出現次數最多的數字
	int num[100000] = {0}; // 記錄出現的次數,最大的數是100000

	for (int i = 0; i < n; i++)
	{
		num[array[i]]++; 
	}

	// 3. 找到數字最大元素的下標
	int maxPosition = max_element(num, num + 100000) - num; 
	// maxPosition 放置的最大數的下標,num[maxPosition]放的是出現最多的數字的次數
	
	int mode = maxPosition; // 衆數就是出現次數最多的
	int cnt = 0; // 統計出現衆數的個數 
	//cout << mode << " mode" << endl;
	for (int i = 0; i < n; i++)
	{
		if ((x | array[i]) == mode)
		{
			cnt++;
		}
	}
	cout << cnt << endl;
	
	// 釋放動態數組
	delete[]array;
	long finish = clock();  //結束時間
	
	cout << "時間:" << (double)(finish - start) / CLOCKS_PER_SEC << endl;
	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章