2017京东笔试总结

第一题,给一个数A,求A用2-A-1进制表示的所有数的每一位的总和的平均数。

比如5,则用2进制表示为101;3进制表示为12;4进制表示为11,则所有数的总和为1+0+1+1+2+1+1 = 7

平均数为7/3要求表示成不可约分的形式。

思路比较简单辗转相除的方法,求出每一个进制表示的数各个位的总和,然后除以总的个数,这边最需要注意的一个点就是,最后的结果是要表示成不可约分的形势,因此在输出结果时候,还要除以分子和分母的最大公约数。

#include <iostream>
#include <vector>

using namespace std;
int greatDivisor(int num1, int num2) {
	if (num1 > num2) {
		return greatDivisor(num1 - num2, num2);
	}
	else if (num2 > num1) {
		return greatDivisor(num1, num2 - num1);
	}
	else
		return num1;
}
int main() {
	int A = 0;
	while (cin >> A) {
		long long sum = 0;
		for (int i = 2; i < A; i++) {
			int temp = A;
			while (temp) {
				sum += temp%i;
				temp /= i;
			}
		}
		int Commondivisor = greatDivisor(sum, A - 2);
		cout << sum / Commondivisor << "/" << (A - 2) / Commondivisor << endl;
	}

}

  

第二题:小明有一堆爬上的数据,m和n,m表示第几天,n表示他当天爬的海拔高度,要求是相邻两天的高度差不超过1,并且第一天和最后一天的高度可以是任意输入,他遗失了这份数据中的一部分,问你能不能通过没有遗失的数据求出他可能爬的最高海拔,如果可以输出可能的最高海拔,如果不行,输出“IMPOSSIBLE”;

比如

8 2

2 0

7 0 

上面这组数据表示他一共有8天的数据,没有遗失的数据有2天,分别是第2天海拔0,第7天海拔0,则可以发现,如果高度差不超过1,则第4天或者第5天的海拔最高为2,可能的情况为(2,0)(3,1 )(4,2)(5,2 )(6,1) (7,0)

则按要求输出为2

8 3

2 0

7 0

8 3

对于这组数据,由于第7天和第8天相邻两天高度差超过了1,所以输出IMPOSSIBLE

这道题我没有AC,当时想错了一个地方,其实和第一组测试数据很有关系,由于第一组测试数据刚好2,7都为0,并且最高高度为两天的中间那天,所以我简单的把最高高度换乘了0+(7-2)/2,其实这样是不对的,其实这题真的非常简单初中的知识,画一个图解方程就明白了。

这样最大高度的公式就很容易表示了,还需要考虑第一天和最后一天可能的高度,然后再求出最大值。当时被(2,0) (7,0)这两对数据误导,一直没有AC

当然下面的代码我也不保证能够AC。。。。哈哈哈~等下次题目有了再提交看看,如果有什么问题的话欢迎给我留言。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	int day;
	int unmissDay;
	cin >> day;
	cin >> unmissDay;
	vector<pair<int,int>> dayInfo(unmissDay);
	for (int i = 0; i < unmissDay; i++) {
		int oneday; //日期
		int oneheight; //高度
		cin >> oneday;
		cin >> oneheight;
		dayInfo[i] = make_pair(oneday,oneheight);
	}
	int maxheight = 0;
	bool flag = true;
	for (int i = 1; i < unmissDay; i++) {
		if (dayInfo[i].first - dayInfo[i - 1].first < abs(dayInfo[i].second - dayInfo[i - 1].second))
		{
			flag = false;
			break;
		}
		maxheight = max(maxheight, (dayInfo[i - 1].second + abs(dayInfo[i].second - dayInfo[i - 1].second + dayInfo[i].first - dayInfo[i - 1].first) / 2));
	}
	maxheight = max(maxheight, max(dayInfo[0].second + dayInfo[0].first - 1, dayInfo[unmissDay - 1].second + unmissDay - dayInfo[unmissDay - 1].first));
	//需要考虑第一天和最后一天的高度
	if (flag) {
		cout << maxheight << endl;
	}
	else {
		cout << "IMPOSSIBLE" << endl;
	}
}

  

原文地址:https://www.cnblogs.com/rockwall/p/5845157.html