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

      

  • 相关阅读:
    mysql在windows下备份&恢复数据库语句
    Postman(三)、获取响应数据
    LoadRunner(八)、常用的接口压测格式
    LoadRunner(七)、集合点
    LoadRunner(六)、事务
    LoadRunner(五)、参数化之文本参数化
    repmgr安装使用
    PostgreSQL 游标的种类
    win server 2019 资源管理器 内存占用高
    给MySQL中某表增加一个新字段,并设为主键值为自动增长。
  • 原文地址:https://www.cnblogs.com/rockwall/p/5845157.html
Copyright © 2020-2023  润新知