笔试题《最好一样》

时间限制: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;
}

 

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