• 【笔试题】京东2017秋招笔试真题


    笔试题 京东2017秋招笔试真题

    1、进制均值

    时间限制 C/C++语言 1000MS;其他语言 3000MS

    内存限制 C/C++语言 65536KB;其他语言 589824KB

    题目描述
    尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。
    小B感兴趣的是,一个数A如果按2到A-1进制表达时,各个位数之和的均值是多少?她希望你能帮她解决这个问题?
    所有的计算均基于十进制进行,结果也用十进制表示为不可约简的分数形式。

    输入
    输入中有多组测试数据。每组测试数据为一个整数A(1=<A=<5000)。

    输出
    对每组测试数据,在单独的行中以X/V的形式输出结果。

    样例输入
    5
    3

    样例输出
    7/3
    2/1

    C++代码

    #include<bits/stdc++.h>
    using namespace std;
    int hexSum(int n,int a)
    {
        int sum = 0;
        while(n)
        {
            sum += (n%a);
            n = n/a;
        }
        return sum;
    }
    int main()
    {
        int A;
        while(cin>>A)
        {
            int sum = 0;
            for(int i=2; i<=A-1; i++)
            {
                sum += hexSum(A,i);
            }
            int r = __gcd(sum,A-2);
            cout<<sum/r<<'/'<<(A-2)/r<<endl;
        }
        return 0;
    }
    

    运行结果

    2、集合

    时间限制 C/C++语言 1000MS;其它语言 3000MS

    内存限制 C/C++语言 65536KB;其它语言 589824KB

    题目描述
    给你两个集合,要求 {A} + {B}。
    注:同一个集合中不会有两个相同的元素。

    输入
    多组(不超过 5 组)数据。
    每组输入数据分为三行,第一行有两个数字 n,m(0<n,m<10000),分别表示集合 A 和集合 B 的元素个数。后两行分别表示集合 A 和集合 B。每个元素为不超出 int 范围的整数,每个元素之间有一个空格隔开。

    输出
    针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开。

    样例输入
    1 2
    1
    2 3
    1 2
    1
    1 2

    样例输出
    1 2 3
    1 2

    C++代码

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int m,n,i,j,c;
        int nums[20010] = {0};
        while(cin>>m>>n)
        {
            for(i=0; i<m+n; i++)
            {
                cin>>nums[i];
            }
            sort(nums,nums+m+n);
            c = unique(nums,nums+m+n)-nums;
            for(j=0; j<c; j++)
            {
                if(j==c-1)
                {
                    cout<<nums[j];
                }
                else
                {
                    cout<<nums[j]<<' ';
                }
            }
        }
        return 0;
    }
    

    运行结果

    3、通过考试

    时间限制 C/C++语言 1000MS;其它语言 3000MS

    内存限制 C/C++语言 65536KB;其它语言 589824KB

    题目描述
    小明同学要参加一场考试,考试一共有n道题目,小明必须做对至少60%的题目才能通过考试。考试结束后,小明估算出每题做对的概率,p1,p2,…,pn。你能帮他算出他通过考试的概率吗?

    输入 
    输入第一行一个数n(1<=n<=100),表示题目的个数。第二行n个整数,p1,p2,…,pn。表示小明有pi%的概率做对第i题。(0<=pi<=100)

    输出
    小明通过考试的概率,最后结果四舍五入,保留小数点后五位。

    样例输入 

    50 50 50 50

    样例输出
    0.31250

    C++代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100+5;
    int main()
    {
        int i,j,temp,n;
        double p[maxn];
        double dp[maxn][maxn];
        cin>>n;
        for(i=0; i<n; i++)
        {
            cin>>temp;
            p[i] = temp/100.0;
        }
        dp[0][0] = 1;
        for(i=1; i<=n; i++)
        {
            dp[i][0] = dp[i-1][0]*(1-p[i-1]);
            for(j=1; j<=n; j++)
            {
                dp[i][j] = dp[i-1][j]*(1-p[i-1])+dp[i-1][j-1]*p[i-1];
            }
        }
        double result = 0;
        for(i = (int)(ceil(0.6*n)); i<=n; i++)
        {
            result += dp[n][i];
        }
        printf("%0.5f",result);
        return 0;
    }
    

    运行结果

    4、异或

    时间限制 C/C++语言 2000MS;其他语言 4000MS

    内存限制 C/C++语言 65536KB;其他语言 589824KB

    题目描述
    异或运算是常见的二进制运算,给出两个n位二进制数a,b。a异或b的运算依次考虑二进制的每一位,若这一位相同,那么这一位的异或结果就是0,不同就是1。
    例如a=1100, b=0100。执行a异或b的运算,a的最高位是1,b的最高位是0,两个数字不同所以最高位异或结果是1;a和b次高位都是1,所以次高位异或为0;最后两位它们都是0,所以异或结果也都是0。那么a异或b的答案就是1000。
    现在输入两个n位二进制数,输出它们异或结果的十进制答案。上述样例中异或的二进制结果为1000,转化成十进制就是8。

    输入
    输入有三行,第一行一个数n(1<=n<=20),接下来两行有两个n位二进制数。输入的二进制数可能有前导零。

    输出
    输出一个数,异或结果的十进制数值,不要输出前导零。

    样例输入
    4
    1100
    0100

    样例输出
    8

    C++代码

    #include<bits/stdc++.h>
    using namespace std;
    int BinaryConversionDecimal(string s,int n)
    {
        int dec = 0, b = 1;
        for(int i=0; i<n; i++)
        {
            dec = dec + (s[n-i-1]-'0') * b;
            b *= 2;
        }
        return dec;
    }
    int main()
    {
        int n;
        string s;
        cin>>n;
        cin>>s;
        int a = BinaryConversionDecimal(s,n);
        cin>>s;
        int b = BinaryConversionDecimal(s,n);
        cout<<(a^b)<<endl;
        return 0;
    }
    

    运行结果

    5、拍卖产品

    时间限制 C/C++语言 1000MS;其它语言 3000MS

    内存限制 C/C++语言 65536KB;其它语言 589824KB

    题目描述
    公司最近新研发了一种产品,共生产了n件。有m个客户想购买此产品,第i个客户出价Vi元。为了确保公平,公司决定要以一个固定的价格出售产品。每一个出价不低于要价的客户将会得到产品,余下的将会被拒绝购买。请你找出能让公司利润最大化的售价。

    输入
    输入第一行二个整数n(1<=n<=1000),m(1<=m<=1000),分别表示产品数和客户数。
    接下来第二行m个整数Vi(1<=Vi<=1000000),分别表示第i个客户的出价。

    输出
    输出一行一个整数,代表能够让公司利润最大化的售价。

    样例输入
    5 4
    2 8 10 7

    样例输出
    7

    C++代码

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int v[1010];
        int n; // 商品数 n
        int m; // 客户数 m
        int i,low,temp,max=0,index;
        cin>>n>>m;
        for(i = 0; i<m; i++)
        {
            cin>>v[i];
        }
        // 对数组 v 进行从小到大的排序
        sort(v,v+m);
        low = m>n?(m-m):0;
        for(i = low; i<m; i++)
        {
            temp = v[i]*(m-i);
            if(temp>=max)
            {
                max = temp;
                index = v[i];
            }
        }
        cout<<index<<endl;
        return 0;
    }
    

    运行结果

    二进制转换为十进制

    #include<iostream>
    using namespace std;
    int main ()
    {
        int num, rem, temp, dec = 0, b = 1;
        cout << "Enter the binary number : ";
        cin >> num;
        temp = num;
        while (temp > 0)
        {
            rem = temp % 10;
            dec = dec + rem * b;
            b *= 2;
            temp /= 10;
        }
        cout << "The decimal equivalent of " << num << " is " << dec;
        return 0;
    }
    

    运行结果

    矩阵转置

    #include<stdio.h>
    #define ROW 4
    #define COL 4
    int M[ROW][COL] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
    main(){
        int i, j, t;
        printf("Before transposition:
    ");
        for (i = 0; i < 4; ++i){
            for (j = 0; j < 4; ++j){
                printf ("%d	", M[i][j]);
            }
            printf("
    ");
        }
        for (i = 0; i < 4; ++i){
            for(j = i;j < 4; ++j){
                t = M[i][j];
                M[i][j] = M[j][i];
                M[j][i] = t;
            } 
        }
        printf("After transposition:
    ");
        for (i = 0; i < 4; ++i){
            for (j = 0; j < 4; ++j){
                printf ("%d	", M[i][j]);
            }
            printf("
    ");
        }  
    }
    

    运行结果

  • 相关阅读:
    Spring的IOC容器学习笔记
    全球疫情可视化展示
    GitHub-暂存区与版本回退
    GitHub-创建仓库与本地同步
    Shell脚本常用模板
    Shell按行读取文件的3种方法
    shell脚本:通过域名获取证书的过期时间
    如何禁止chrome浏览器http自动转成https 【转】
    kafka_2.11-2.0.0_常用操作
    kafka_2.11-2.0.0_安装部署
  • 原文地址:https://www.cnblogs.com/hgnulb/p/10602139.html
Copyright © 2020-2023  润新知