好未来2019校招笔试

好未来2019校招笔试 2018.8.28

题目一 和为3的个数

给定一组长数字,切割使得各部分3的倍数个数最多

例 12345 12,3,45 

输出 3

思路:如果各位加和是3的倍数,那么能被3整除

python版本

import sys
def res(x):
    num = 0
    sum = 0
    for i in range(len(x)):
        sum += int(x[i])
        if (sum % 3 == 0):
            num += 1
            sum = 0
    return num
for line in sys.stdin:
    x = line.strip()
    print(res(x))

c++版本

#include <bits/stdc++.h>
using namespace std;

int  main() {
    string str;
    cin>>str;
    int sum=0;
    int num=0;
    for(int i=0;i<str.size();i++){
        sum+=str[i]-'0';
        if(sum%3==0) {
            num++;
            sum=0;
        }
    }
    cout<<    num   <<endl;
    return 0;
}

题目二:x+y=x|y

输出第k个满足x+y=x|y的数

输入t行 每行 x,k 

例:

1

4 2

输出:2

#include <bits/stdc++.h>
using namespace std;
int main() {
    long long t,x,k,ans,i,j,a,lenX,lenK,lenA;
    int posX[100],posK[100],posA[100];
    cin>>t;
    while (t--){
        memset(posX,0, sizeof(posX));
        cin>>x>>k;
        i=0,ans=0;
        while (x>0){
            posX[i++]=x&1;
            x=x>>1;
        }
        lenX=i;
        i=0;
        while (k>0){
            posK[i++]=k&1;
            k=k>>1;
        }
        lenK=i;
        for(i=0,j=0,a=0;j<lenK;i++){
            if(posX[i]==0)
                posA[a++]=posK[j++];
            else posA[a++]=0;
        }
        lenA=a;
        for(i=lenA-1;i>=0;i--){
            ans=ans<<1;
            ans=ans|posA[i];
        }
        cout<<ans<<endl;
    }
}

题目三:打印数组组合

固定数组{0,1,2,3,4,5,6,7,8,9}

一个布尔数组,例如{0,1,1,1,1,1,1,1,1,0}

0可以选择也可以不选择

打印数组组合所有情况

012345678
0123456789
12345678
123456789

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int a[10]={0,1,2,3,4,5,6,7,8,9};
int pos[10],i,p[10];
set<string> v;
void Print(){
    string s="";
    for(i=0;i<10;i++){
        if(p[i]==1)
            s+=a[i]+'0';
    }
    v.insert(s);
}
 
int main() {
    for(i=0;i<10;i++)
        cin>>pos[i];
    int add = 0,tmp;
    while (1){
        int flag=0;
        for(i=9;i>=0;i--){
            if(p[i]==0){
                flag=1;
            }
        }
        if(flag==0){
            break;
        }
        //打印
        tmp=add++;
        for(i=9;i>=0;i--){
            p[i]=pos[i];
            if(pos[i]==0){
                p[i]=tmp&1;
                tmp=tmp/2;
            }
        }
        Print();
    }
    set<string>::iterator it;
    for(it=v.begin();it!=v.end();it++){
        cout<<*it<<endl;
    }
}


题目四 :求摇色子期望

n面 m面有奖励,求期望

6 1

1 1 1 1 1 1

import sys
n,m=input().split()
a=int(n)-int(m)
sum=0
line=list(map(int,input().split()))
for x in line:
    sum=sum+x
print('%.2f' % (sum/a) )

 

题目五: 单调递增序列最大和

输入 5 1 3 4 9 7 6 8

输出 23 

维持一个数组sum sum[i]包含当前位置i的最大递增子序列和

python版本

import sys
line=list(map(int,input().split()))
sum=[0]*len(line)
for i in range(len(line)):
    sum[i]=line[i]
    for j in range(i):
        if line[j]<line[i]:
            sum[i]=max(sum[i],sum[j]+line[i])
max_sum=sum[0];
for x in sum:
    max_sum=max(x,max_sum)

print(max_sum)

c++版 

#include <bits/stdc++.h>
using namespace std;
const int  nmax=105;
int  main() {
    int a[nmax];
    int n=0;
    while(cin>>a[n++]);
    n-=1;
    int sum[n];
    for(int i=0;i<n;i++){
        sum[i]=a[i];
        for(int j=0;j<i;j++){
            if (a[j]<a[i])
                sum[i]=max(sum[i],sum[j]+a[i]);
        }
    }
    int max_sum=sum[0];
    for(int i=1;i<n;i++){
        if(sum[i]>max_sum)
            max_sum=sum[i];
    }
    cout<<    max_sum   <<endl;
    return 0;
}

题目六  替换字符串

#include <bits/stdc++.h>
using namespace std;
#define ll long long
 
void string_replace( string &strBig, const string &strsrc, const string &strdst) {
    int pos = 0;
    int srclen = strsrc.size();
    int dstlen = strdst.size();
 
    while ((pos = strBig.find(strsrc, pos)) != string::npos) {
        strBig.replace(pos, srclen, strdst);
        pos += dstlen;
    }
}
 
int main() {
    string str,s,p;
    getline(cin,str);
    cin>>s>>p;
    string_replace(str, s, p);
    cout << str << endl;
}

 

猜你喜欢

转载自blog.csdn.net/behboyhiex/article/details/82156124