拼多多19年提前批笔试

本文包含四个编程题目:买可乐问题、选球王、运输货物优化及电话号码成本最小化。通过C++实现,涉及数组操作、字符串处理、排序算法及数据结构应用等关键技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.买可乐

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string strs[]={"Alice","Bob","Cathy","Dave"};
    int n=0;
    cin>>n;

    int i=1;
    while(n>i*4)
    {
        n-=i*4;
        i<<=1;
    }
    int a=n/i;
    if(n%i)
    {
        a++;
    }
    cout<<strs[a-1];

    return 0;
}

2.选球王

#include<iostream>
#include<string>
using namespace std;
int main()
{
    vector<string> str;
    string str1;
    int n,m;//n是候选球星m是选票数量
    
    int king=0;
    int flag=0;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        cin>>str1;
        str.push_back(str1);
    }
    vector<char>max;
    for(int i=0;i<m;i++)
    {
        max.push_back(str[i][0]);
    }
    for(int j=1;j<n;j++)
    {
        int num1=0;
        int num2=0;
        for(int i=0;i<m;i++)
        {
            if(max[i]<str[i][j])
                num1++;
            else if(max[i]>str[i][j])
                num2++;
        }
        if(num1<num2)
        {
            max.clear();
            falg=0;
            king=j;
            for(int k=0;k<m;k++)
            {
                max.push_back(str[k][j]);
            }
        }
        else if(num1==num2)
            flag=1;
    }
    if(flag==1)
        cout<<"-1"<<endl;
    else
        cout<<king<<endl;
    return 0;
}

3.运输货物

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
   vector<int>weight;
   int num;
   int len=0;
   int cnt=0;
   while(cin>>num)
   {
       weight.push_back(num);
       len++;
       
       if(cin.get()=='\n')
        break;
   }
   sort(weight.begin(),weight.end());
   int i=0;
   int j=len-1;
   while(i<=j)
   {
       if(weight[i]+weight[j]>300)
       {
           j--;
           cnt++;
       }
       else if(weight[i]+weight[j]>200)
       {
           i++;
           j--;
           cnt++;
       }
       else
       {
           cnt+=(j-i)/3+1;
       }
        
   }
    cout<<cnt<<endl;
    return 0;
}

4.电话号码

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
    int m=0,k=0;
    cin>>m>>k;
    vector<int>vi;
    vector<int>vnum(10,0);

    string s;
    getline(cin,s);
    s.clear();
    cin>>s;

    for(int i=0;i<m;i++)
    {
        int si=int(s[i]-'0');
        vi.push_back(si);
        vnum[si]++;
    }

    vector<vector<int>>cl(10,vector<int>(10,0));
    vector<int>mCost(10,0);
    for(int i=0;i<10;i++)
    {
        int num=k-vnum[i];
        if(num<=0)
        {
            cl[i][i]=0;
            break;
        }
        int flag=-1;
        while(num>0)
        {
            if(i+flag>=0)
            {
                num=num-vnum[i+flag];
                if(num<=0)
                {
                    mCost[i]+=abs(flag)*(num+vnum[i+flag]);
                    cl[i][i+flag]=num+vnum[i+flag];
                    break;
                }
                mCost[i]+=abs(flag)*vnum[i+flag];
                cl[i][i+flag]=vnum[i+flag];
            }
            flag=-(flag+1);
        }
    }

    int minCost=mCost[0],mini=0;
    for(int i=1;i<10;i++)
    {
        if(minCost>mCost[i])
        {
            minCost=mCost[i];
            mini=i;
        }
    }

    for(int i=0;i<vi.size();i++)
    {
        if(cl[mini][vi[i]]!=0)
        {
            cl[mini][vi[i]]--;
            s[i]=mini+'0';
        }
    }
    cout<<minCost<<endl;
    cout<<s<<endl;
    vi.clear();
    vnum.clear();
    mCost.clear();
    cl.clear();
    system("pause");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值