京东笔试题——进制均值
来源:互联网 发布:知乎miya的米牙 编辑:程序博客网 时间:2024/05/23 19:48
1. 题目描述
尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题,现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示为三位数1、7、3,按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11,。 小B感兴趣的是,一个数A如果按2到A-1进制表达时,各个位数之和的均值是多少?她希望你能帮她解决这个问题? 所有的计算均基于十进制进行,结果也用十进制表示为不可约简的分数形式。
2. 题目分析
题目很长,这大概就是笔试题的特点,墨迹一堆,就看你能不能理解。大概的意思就是给你一个整数N,让你将N分别转化为2进制、3进制……N-1进制,然后把每一位的数字相加,对这几种进制求均值。假设T(N,X)为将整数N转化为X进制后的各位数字和,则Answer = [T(N,X=2)+T(N,X=3)+……+T(N,X=N-1)] / (N-1-1)。
3. ac解法——cpp
#include <iostream>#include <algorithm>#include <string>using namespace std;// 求整数x转换成n进制后各位数字的和int everyByteSum(int x, int n, int &everysum) { int yushu = x % n; everysum += yushu; if (x/n >= n) { everyByteSum(x/n, n, everysum); } else { everysum += x/n; } return everysum;}int main() { int X; cin >> X; if (X < 1 || X > 5000) // 判定非法输入 return -1; int everysum = 0; int allsum = 0; for(int i = 2; i < X; i++) { // 计算每一种进制的总和 everysum = 0; allsum += everyByteSum(X, i, everysum); } string ans; // 答案要求输出分数形式,所以使用字符串 int len = X - 2; // 进行分式化简 if (allsum % len == 0) { allsum = allsum / len; len = 1; } for(int i = 2; i <= len; i++) { while(allsum%i == 0 && len%i == 0 && allsum/i!=0 && len/i!=0){ allsum = allsum / i; len = len / i; } } // 将结果转化为分式后输出 ans = to_string(allsum); ans += "/"; ans += to_string(len); cout << ans << endl; return 0;}
4. 总结
在这里分式化简的部分不够有普遍适用性。理论上应该先求取allsum和len的最大公约数之后,分别除掉最大公约数即可。在规定时间内时间有点紧张,一时掀不起来求最大公约数的算法,所以采用了上面化简的不优美的方法。所以在这里贴一下求最大公约数的算法,希望下次需要的时候能够信手拈来。
最大公约数的求取:
方法一:辗转相除法
int MaxCommonDivisor(int a, int b) { if (a % b == 0) return b; else return MaxCommonDivisor(b, a%b);}
方法二:辗转相减法
int MaxCommonDivisor(int a, int b) { if (a == b) return a; if (a > b) return MaxCommonDivisor(a-b, b); else return MaxCommonDivisor(a, b-a);}
方法三:暴力求解(如题目解答中化解部分)
阅读全文
0 0
- 京东笔试题——进制均值
- 京东笔试编程题:进制均值(C++)
- 京东笔试题之进制均值
- 牛客网编程题:进制均值
- 进制均值
- 进制均值
- 进制均值
- 进制均值
- 进制均值
- 京东2017进制均值
- 京东笔试题——集合
- 进制均值-进制转换+最大公约数
- 进制均值(京东2017秋招真题)
- 进制均值(京东2017秋招真题)
- OJ练习1 --- 进制均值
- Caffe4——计算图像均值
- OpenCV blur函数——均值滤波
- opencv——均值漂移分割
- tp5的RBAC插件及其使用很方便的管理用户登录及操作权限
- Byte,TBytes,array of Byte, array[0..9] of byte的区别
- 帮你理清 Web 应用的登录状态
- 测试的那点事之node缓存
- Tomcat入门
- 京东笔试题——进制均值
- MySQL创建存储过程
- eclipse更改J2EE对应的Web版本
- 安卓设置全屏或者无标题
- 基础题目--树
- console 问题
- gson序列化对象(值为空也序列化、值为null转换为""、排除策略)
- Trees on the level UVa 122
- 深度解析栈操作