京东校招笔试(C++方向)编程题

这次笔试是今年校招我参加的第一次笔试。。出了很多状况,基础知识不扎实,导致选择题耽误了太多时间,导致后面的题目没做完,编程题也没有在

时间内写出来,基本没有面试机会了。不过我继续研究第二个编程题,在10几分钟后做了出来。

这个题目具体已经不记得了,但是大概意思还是记得,我们把由4和7组成的数,按小大排序,例如:4 7 44 47 74 77 444 447 474 477 744 747 774 777

他们的序号依次为1,2,3,4.....,题目的输入是每行输入一个整数,可以很大(好像是最大为10的18次方),然后你输出对应的由4和7组成的数。

例如:

输入  2

3

14

输出就为

7

44

777

这个题目拿到手后,感觉就是要进行移位再与的操作,因为4747和0101多么的像,但是在笔试过程中,没有分析好怎么控制,单纯的想除以2,求关于2的余数就可以

得到结果。自然而然没有做出来,其实这是一个关于等比数列的问题,来决定这个整数对应的数到底有几位

1   2/   3   4   5   6/   7    8    9    10    11    12    13    14/   15

4   7/  44 47 74 77/  444 447 474 477 744 747   774   777/ 4444

/2   /       4           /                    8                                  /    16

我们的思路是把这个数减去它前面的等比数列之和,再减一,对应的就是0~2的n次方-1之间的数,比如 1-2 对应的就是0,1,(二进制为0,1),3-6对应的就是0-3(

二进制为00,01,10,11),然后我们对1进行移位操作,然后与这个0~2的n次方-1之间的数做&(与操作),如果为1,则输出7.如果为0,则输出4即可

下面是代码:

#include<iostream>
using namespace std;

int main()
{
unsigned long long k;
while (cin >> k)
{
unsigned long long sum = 0, num = 1;
unsigned int len = 1;
for (;;++len)
{
sum += num * 2;
num *= 2;
if (k <= sum)break;
}
sum -= num;
k = k - sum - 1;
for (unsigned int i = len;i >= 1;--i)
{
if (k&(unsigned long long)(1 << (i - 1)))cout << 7;
else cout << 4;
}
cout << endl;

}
return 0;
}

结果截图:

时间: 2025-01-03 00:21:52

京东校招笔试(C++方向)编程题的相关文章

2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网

 2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/276712b113c6456c8cf31c5073a4f9d7来源:牛客网 牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度. 输入描述: 输入为两行字符串(可能包含空格),长度均小于等于50. 输出描述: 输出为一个整数,表示最长公共连续子串的长度. 输入例子: abcde abgde 输出例子

网易2017校招内推笔试练习卷编程题1--1019.数字黑洞20

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给

网易2017校招内推笔试练习卷编程题2--出专辑

你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中.每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒.为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ? 输入描述: 每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L. 保证 n ≤ 100 , s ≤ L ≤ 10000 输出描述

2017-08-23 华为笔试第二道编程题详解

[题目描述] 给定一个整数,给出消除重复数字以后最大的整数 输入描述 :正整数,注意考虑长整数 输出描述 : 消除重复数字后的最大整数 [示例1] 输入 : 423234 输出 : 432 [思路] 使用栈作为辅助工具,首先从前往后遍历数组 * 栈为空就压入栈 * 栈非空,判断当前数组元素是否大于栈顶元素 * 是 , 判断栈顶元素是否在后面的数组中存在,如果存在就弹出栈顶元素 * 判断栈中是否已经存在当前数组元素,否,将当前数组元素压入栈 [参考] http://www.cnblogs.com/

去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码

编程题很简单.整个试卷结构为: 一.问答题: 对前端的理解,了解哪些框架库? 二.在线编程题:身份证分组 如下第一道:身份证分组 三.在线编程题:身份证分组.统计字符.酒店价格(三选二) 如下第二三四道题中三选二作答. 我也搞不懂为什么有两部分编程题~~~下面详细说一说编程题目及JS代码实现: 第一道:身份证分组 代码: 1 var line; 2 while(line = read_line()){ 3 while(line.indexOf(" ") != -1){ 4 line =

华为2020校招笔试编程题

刚做完华为的笔试题,简要描述一下三道编程题的解决方法以及python代码实现 第一题大致描述: 给定两个已经升序排序好的的序列A={a1,a2,a3,...an} 和B={b1,b2,b3...bn} ,一个数R,找出满足以下条件的的(ai,bj)序列对 1.ai<=bj 2.bj和ai两者的距离 满足 bj-ai<=R ,要是该条件不满足,就从序列B中找出 和ai 距离最接近R的一个点bj(同时要满足条件1) 输入样例:A={1,3,5},b={2,4,6},R=1 输出样例:(1,2)(3

JavaScript编程题(含腾讯2016校招题)

作者:ManfredHu 链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/ 声明:版权所有,转载请保留本段信息,否则请不要转载 几道觉得挺有意思的编程题,感觉做下来,自己对一些新方法的看法有了新的变化. 比如indexOf,reduce,Array.isArray,forEach这些方法,以前一看到兼容性是IE9+就有点害怕,项目中不敢用,导致后面越来越陌生,不过现在一想的话.其实只要用Polyfill或者提前fix掉就可以了

美团点评2017秋招笔试编程题

美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法. 题解: 写出前面的几个, 1 -> 1;   2 -> 2 ;  3 -> 4;   4 -> 8; 5 -> 16; 6 -> 32; 可以得到是 二的 n-1 次幂. #include <cstdio> int

小米2015笔试编程题

小米2015笔试编程题 1.[编程题] 懂二进制 时间限制:1秒 空间限制:32768K 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子1: 1999  2299 输出例子1: 7 分析:第一步求这两个数的异或,得到一个新的数,相同位是0,不同位是1:第二步采用位运算求这个数里边1的个数即为结果 1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5