2017京东秋招笔试题

1、进制均值

数A按2到A-1进制表达 ,各个位数之和的均值多少?输入多组测试数据

输出
5 7/3
3 2/1

思路

进制位数均值

sum+=A%x 

A=A/x

输出结果是分数可能需要约分 利用最大公约数

代码

#include 
#include 
using namespace std;

int hexsum(int x,int a){
    int ans=0;
    while(x){
        ans+=x%a;
        x/=a;
    }
    return ans;
}
int gcd(int x,int y){
    if(x==0) return y;
    if(y==0) return x;
    if(x%2==0&&y%2==0) return 2*gcd(x>>1,y>>1);
    else if(x%2==0) return gcd(x>>1,y);
    else if (y%2==0) return gcd(x,y>>1);
    else return gcd(min(x,y),fabs(y-x));
}
int main() {
    int x;
    
    while(cin>>x){
        int sum=0;
        for(int i=2;i

2、集合

多组{A}+{B}

样例输入

1 2

1

23

1 2

1

1 2

输出

1 2 3

1 2

思路

利用集合

set s;

s.insert(x);

集合遍历

set ::iterator it;

for(it=s.begin();it!=s.end();++it)

代码

#include 
#include 
#include 
using namespace std;

int main() {
int n,m;
while(cin>>n>>m){
    set  s;
    for(int i=0;i>x;
        s.insert(x);
    }
    for(int i=0;i>x;
        s.insert(x);
    }
    set::iterator it;
        for (it = s.begin(); it != s.end(); it++){
            printf("%d ", *it);
        }
        printf("\n");
}
return 0;
}

3、通过考试

一共n道题,每题作对概率pi,求至少60%概率 输出保留小数点后五位

输入

4

50 50 50 50 50 

输出

0.31250

思路

四题作对60% 至少3道

n道 60% (3*n+4)/5

保留5位小数

printf("%.5f\n".ans)

dp[i][j]表示前道作对j道的概率

输出dp[n][i] i>=(3*n+4)/5 

代码

#include 
#include 
using namespace std;
int main() {
	const int N=100;
	int n;
	cin>>n;
	int p[n];
	double dp[N][N]={0};
	for(int i=1;i<=n;i++){
	    cin>>p[i];
	}
    dp[0][0]=1;
    for(int i=1;i<=n;i++){
        dp[i][0]=dp[i-1][0]*(100-p[i])/100;
        for(int j=1;j<=i;j++){

                dp[i][j]=dp[i-1][j]*(100-p[i])/100+dp[i-1][j-1]*1.0*p[i]/100;
            
        }
    }
    int begin=(3*n+4)/5;
    double ans=0;
    for(int i=begin;i<=n;i++){
        ans+=dp[n][i];
    }
	printf("%.5f\n",ans);
	return 0;
}

4、异或

两个n位数,异或后十进制

输入

4

1100

0100

输出

8

思路

先转换为十进制,再异或输出

二进制转十进制注意先乘以2 再加

ans*=2;

ans+=s[i]-'0'

代码

#include 
#include 
using namespace std;

int slove(string s,int n){
    int ans=0;
    for(int i=0;i>n;
    string s;
    cin>>s;
    int a=slove(s,n);
    cin>>s;
    int b=slove(s,n);
	cout<<(a^b)<

5、拍卖产品

n件 m人买 出价v[i] 求最大利润

输入

5 4

2 10 8 7

输出

7

思路

输入v[i]

对V[i]排序

调用#include

sort(v+1,v+m+1);

ans=max(v[i]*(m-i+1))

pos=v[i]

 

代码

#include 
#include
using namespace std;

int main() {
	const int N=1000;
	int m,n,pos,ans=0;
	int v[N];
	cin>>m>>n;
	for(int i=1;i<=m;i++){
	    cin>>v[i];
	}
	sort(v+1,v+m+1);
	for(int i=1;i<=m;i++){
	    if(ans

 

你可能感兴趣的:(秋招)