最近见到的一些2017年的名企校招题

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
#if 0
long fibonacci1(int n)
{
    if(n<=2)
        return 1;
    else
    {
        long num1=1;
        long num2=1;
        for(int i=2; i<n-1; i++)
        {
            num2=num1+num2;
            num1=num2-num1;
        }
        return num1+num2;
    }
}
int fibonacci(int n) ///递归求解的时间复杂度为o(n)
{
    cout<<"calculating "<<n<<endl;
    if (n<=0)
    {
        return  0;
    }
    if (n==1)
    {
        return 1;
    }
    return fibonacci(n-1)+fibonacci(n-2);
}
long fibonacci2(int n)
{
    if(n<=0)
    {
        return 0;
    }
    if(n==1)
    {
        return 1;
    }
    int min=0;
    int max=1;
    int i=2;
    int result=0;
    while(i<=n)
    {
        result=min+max;
        min=max;
        max=result;
        ++i;
    }
    return result;
}
int main(int argc,char *argv)
{
    int N;
    cin>>N;
    cout<<fibonacci(N)<<endl;
    return 0;

}
#endif
#if  0  ///十进制和十二进制的转换(华为17年校招)
void solve(int num);
int main()
{
    int num;
    while(cin>>num)
    {
        solve(num);
    }
    return 0;
}
void solve(int num)
{
    if(num==0)
    {
        cout<<"0"<<endl;
        return;
    }
    char c;
    vector<char> s;
    while(num)
    {
        if(num%12==10)
        {
            c='A';
        }
        else if(num%12==11)
        {
            c='B';
        }
        else
        {
            c=num%12+'0';
        }
        s.push_back(c);
        num=num/12;
    }
    vector<char>::iterator vi;
    for(vi=s.end()-1; vi>=s.begin(); vi--)
    {
        cout<<(*vi);
    }
    cout<<endl;
    return;
}
#endif
#if 0   ///缘分匹配(华为17年校招)
int main(int argc,char *argv)
{
    int N,M;
    int i,j;
    cin>>N;
    M=2*N;
    int array[50]= {0};
    int man[20]= {0};
    int man_var=0;
    int woman[20]= {0};
    int woman_var=0;
    int totel;
    for(i=0; i<M; i++)
    {
        cin>>array[i];
    }
    for(i=0; i<M; i++)
    {
        man_var +=array[i];
        man[i] =  man_var;
    }
    printf("man ");
    for(i=0; i<M; i++)
    {
        printf("man[i]=%d ",man[i]);
    }
    printf("\n");
    for(j=M-1; j>=0; j--)
    {
        woman_var +=array[j];
        woman[j]=woman_var;
    }
    printf("woman ");
    for(i=0; i<M; i++)
    {
        printf("woman[i]=%d ",woman[i]);
    }
    printf("\n");
    int count=0;
    for(i=0; i<M; i++)
    {
        for(j=0; j<M; j++)
        {
            if(man[i]==woman[j])
            {
                count++;
            }
        }
    }
    printf("count=%d\n",count);
    return 0;
}
#endif // 1
///测试动态分配内存的传值或者传址
#if 0
void allocate(char *&p,int size)
{
    cout<<&p<<endl;
    p=(char *)malloc(size);
}
int main()
{
    char *str=NULL;
    cout<<&str<<endl;
    allocate(str,100);
    strcpy(str,"hello world!");
    printf("%s\n",str);
    free(str);

    return 0;
}
#endif // 0

#if 0
struct elem{
    int val;
    int index;
};
int main()
{
    int i,j;
    int task[]= {0,30,155,1,80,300,170,40,99};
    struct elem small[20];
    int small_index=0;
    struct elem big[20];
    int big_index=0;
    int length=sizeof(task)/sizeof(task[0]);
    for(i=0;i<length;i++){
        if(task[i]<50){
            small[small_index].val=task[i];
            small[small_index].index=i;
            //printf("%d\n",small[small_index].val);
            small_index++;
        }else {
            big[big_index].val=task[i];
            big[big_index].index=i;
            //printf("%d\n",big[big_index].val);
            big_index++;
        }
    }
    for(i=0;i<small_index;i++){
        printf("%d %d\n",small[i].val,small[i].index);
    }
    for(i=0;i<big_index;i++){
        printf("%d %d\n",big[i].val,big[i].index);
    }

    return 0;
}
#endif
#if 0   ///身份证验证
int str2num(char *src,int len)
{
    int i=0;
    int res=0;
    int flag=1;
    for(i=len-1;i>=0;i--){
        res +=(src[i]-'0')*flag;
        flag *=0;
    }
    return res;
}
int verifyIDCard(char *input)
{
    int i=0;
    int year=0;
    int month=0;
    int day=0;
    int len=strlen(input);
    if(len!=18)
        return 1;
    for(i=0;i<17;i++){
        if((input[i]<'0')||(input[i]>'9'))
            return 2;
    }
    if((input[17]<'0')||(input[17]>'9')||(input[17]!='x'))
        return 3;
    year=str2num(input+6,4);
    month=str2num(input+10,2);
    day=str2num(input+12,2);
    if(year<1900 || year>2100)
        return 4;
    if(month<1 || month>12) return 5;
    if(day<1 || day>31) return 6;
    if(month==2){
        if(year%4==0)&&(year%100!=0)||(year%400==0){
            if(day>29) return 0;
        }else{
            if(day>28) return 6;
        }
    }
    return 0;
}
int main(int argc,char *argv)
{
   char input[]="412829198808015258";
   verifyIDCard(input);
   return 0;
}
#endif // 1
#if 0 ///华为oj平台基础题
int string2int(char *s,int len)
{
    int res=0;
    int f=1;
    int i=0;
    for(i=len-1;i>=0;i--){
        res=res+(s[i]-'0)*f;
        f=f*10;
    }
    return res;
}
bool isIPAdressValid(char *ip)
{
    int len=0,i=0,j=0,k=0;
    int count=0;
    char src[100]={0};
    char s[10]={0};

    if(IP==0 || IP==" ")
        return false;
    while(ip[len]){
        src[len]=ip[len];
        len++;
    }
    src[len]='\0';
    for(i=0;i<len;i++){
        if((i==0||i=len-1)&&(src[i]==' '))
            continue;
        if((src[i]<'\0'||src[i]>'9')&&(src[i]!='.')&&(src[i]!=' '))
            return false;
        s[j++];
        if(src[i]=='.'){
            count++;
            if(src[i+1]=='.' || src[i+1]=='\0')
                return false;
            if(j>4)
                return false;
            if(j>2 &&s[0]=='0')
                return false;
            for(k=0;k<j-1;k++){
                if(s[k]==' ')
                    return false;
            }
            if(j==4){
                if(string2int(s,3)>255)
                    return false;
            }
            j=0;
        }
    }
    if(count!=3) return false;
    return true;
}
int main(int argc,char *argv)
{
    char IP[]="192.168.1.110";
    isIPAddressValid(const char *pszIPAddr);

    return 0;
}
#endif // 1

#if 0   ///京东17年秋招进制均值
int hexSum(int n,int a)
{
    int sum=0;
    while(n){
        sum +=(n%a);
        n=n/a;
        printf("sum=%d,n=%d\n",sum,n);
    }
    return sum;
}
int main()
{
    int A;
    int tmp;
    int temp1;
    while(cin>>A){
        int sum=0;
        for(int i=2;i<=A-1;i++){
            sum +=hexSum(A,i);
        }
        printf("total=%d\n",sum);
        tmp=9;
        temp1=3;
        while(temp1!=tmp){
             if (temp1>tmp)  temp1=temp1-tmp;
            else  tmp=tmp-temp1;
        }
        printf("temp1=%d\n",temp1);
        //int r=_gcd(sum,A-2);
        cout<<sum<<'/'<<(A-2)<<endl;
    }
    return 0;
}
#endif
#if 0 ///京东17年秋招试题 通过考试
const int maxn=105;
int n,a[maxn];
double dp[maxn][maxn];
int main(int argc,char* argv)
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    dp[0][0]=1;
    for(int i=1;i<=n;i++){
        dp[i][0]=dp[i-1][0]*(100.0-a[i])/100;
        for(int j=1;j<=i;j++){
            dp[i][j]=dp[i-1][j]*(100.0-a[i])/100+dp[i-1][j-1]*1.0*a[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;
}
#endif // 1

#if 0   ///京东17年秋招-异或
int main(int argc,char *argv[])
{
    int i=0;
    char str1[]="1100";
    char str2[]="0100";
    int len=strlen(str1);
    char str[5]={0};
    for(i=0;i<len;i++){
        int int_str1=str1[i]-'0';
        int int_str2=str2[i]-'0';
        printf("%d %d\n",int_str1,int_str2);
        if(int_str1==int_str2){
            str[i]='0';
        }else {
            str[i]='1';
        }
    }
    for(i=0;i<len;i++){
        printf("%c\n",str[i]);
    }
    int sum=0;
    /*for(i=len-1;i<=0;i--){
        if(i==len-1){
             sum =(str[i]-'0');
        }else{
            sum += (str[i]-'0')*2;
        }
    }*/
    for(i=0;i<len;i++){
        sum *=2;
        sum +=str[i]-'0';
    }
    printf("sum=%d\n",sum);
    return 0;
}
#endif // 0

#if 1  ///京东17年校招拍卖产品
const int maxn=1005;
int a[maxn];
int main(int argc,char *argv)
{
    int n,m,ans=0,pos=0;
    scanf("%d%d",&n,&m);
    int i=0;
    for(i=1;i<=m;i++){
        scanf("%d",&a[i]);
    }
    sort(a+1,a+1+m);
    for(i=1;i<=m;i++){
        if(ans<a[i]*min(n,m-i+1)){
            ans=a[i]*min(n,m-i+1);
            pos=a[i];
        }
    }
    printf("%d\n",pos);
    return 0;

}
#endif // 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值