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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM