牛客网华为机试60-81c++版

#include <iostream>

using namespace std;

bool judgeprime(int n)//判断是不是素数,素数就是除了1只有本身的数

{

    for(int i=2;i*i<=n;i++)

    {

        if(n%i==0)//如果发现除了1还有其他数整除,那么就不是素数

        {

            return false;

        }

    }

    return true;

}



int main() {

    int n=0;

    cin>>n;

    int maxl=1,maxr=n;//想要两个数差小那么两个数就靠近中间,n/2

    for(int i=2;i<=(n/2);i++)

    {

        if(judgeprime(i)==true&&judgeprime(n-i)==true)

        {

            maxl=i;

            maxr=n-i;

        }

    }

    cout<<maxl<<endl<<maxr;

   

}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

//递归法判断,n是苹果数,m是盘子数。永远只有两种情况

//1.某个盘子不放

//2.所有盘子都放上苹果

int apple(int n,int m)

{

    if(n<0)//如果苹果数《0,那么返回0

    {

        return 0;

    }

    else if(n==0||m==1||n==1)//如果苹果数0,或者苹果数1,或者盘子数1,那么只有一种方法,所以返回1.

    {

        return 1;

    }

    return apple(n-m,m)+apple(n,m-1);

}

int main() {

    int n,m;

    cin>>n>>m;

    cout<<apple(n,m);

    return 0;



}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

#include<bitset>

#include<string>

#include<algorithm>

int judgeone(int n)//判断1的个数函数

{

    bitset<32>binary(n);//需要包含头文件bitset,可以将n转化为2进制数,32表示32位的

    //cout<<binary<<endl;//测试代码

    string s=binary.to_string();//变化为string类型

    int number=count(s.begin(),s.end(),'1');//包含头文件algorithm,统计字符串内1的个数

    return number;

}

int main() {

    int n;

    while(cin>>n)

    {

        cout<<judgeone(n)<<endl;

    }

    return 0;

}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

//寻找字符串函数

string searchCG(string &s,int n)//传入是s的地址和n

{

    int count=0;//定义一个,计算字符串内有多少个CG

    int maxcount=0;//包含CG最多的计数器

    int tip=0;//包含CG最多的字符串的首元素位置

    for(int i=0;i<s.size()-n;i++)//因为要往后判断n个,所以减去n,防止溢出

    {

        count=0;//计数器重置

        for(int j=0;j<n;j++)

        {

            if(s[i+j]=='C'||s[i+j]=='G')

            {

                count++;//一旦发现CG就把计数器加1

            }

        }

        if(count>maxcount)//如果这个字符串含有的CG比max的都多,那么更新max

        {

            tip=i;//记录位置

            maxcount=count;

        }

    }

    return s.substr(tip,n);//返回从tip开始,n个字符的串

}

int main() {

    string s;

    cin>>s;

    int n;

    cin>>n;

    cout<<searchCG(s,n);



}

// 64 位输出请用 printf("%lld")

#include <iostream>

#include<string>

#include<deque>

using namespace std;

void showmenu(int n,string &s)//展示菜单和选定歌曲函数

{

    deque<int>de;//双端队列存储歌曲1,2,3,4,5,6......

    for(int i=0;i<n;i++)

    {

        de.push_back(i+1);

    }

    // for(auto i:de)

    // {

    //     cout<<i<<' ';

    // }

   

    if(n<4)//如果歌曲数小于4,那么就能全部显示,只需要考虑tip的位置上

    {

        int tip=0;//tip指的是当前选中的歌曲

        for(int i=0;i<s.size();i++)//循环UD的字符串

        {

        if(s[i]=='U')

        {

            tip--;//上移

        }

        else if(s[i]=='D')

        {

            tip++;//下移

        }

        }

        tip=tip%n;//获取应该是当权歌单的对应位置

        if(tip<0)

        {

            tip=-tip;//如果当前位置是上以后的,那么就变符号(上移循环到当前位置如UUU)

        }

        for(int i=0;i<de.size();i++)//输出歌单

        {

            cout<<de[i]<<' ';

        }

        cout<<endl;

        cout<<de[tip];//输出当前位置歌曲

    }

    else//歌曲数量大于等于4首

    {

    int mtipu=0;//歌单的第一首歌

    int mtipd=3;//歌单的最后一首歌

    int tip=0;//选中歌单

    for(int i=0;i<s.size();i++)//循环的UD操作

    {

        if(s[i]=='U')//上移

        {

            if(tip==0)//如果选中歌单是第一首歌,那么应该把歌单变成列表的最后4首

            {

                tip=n-1;//选中最后一首歌

                mtipu=n-4;//倒数第四

                mtipd=n-1;//倒数第一首

            }

            else if(tip!=0)//不是第一首歌

            {

                tip--;//选中目标上移

                if(tip<mtipu)//如果选中目标上移超过了当前歌单,那么就移动歌单

                {

                    mtipu--;//上移歌单顶部

                    mtipd--;//上移歌单底部

                }

            }

        }

        else if(s[i]=='D')//下移

        {

            if(tip==n-1)//同上代码,都是同理的,懒得写了,大家凑合看吧

            {

                tip=0;//变成1

                mtipu=0;//变成1

                mtipd=3;//变成4

            }

            else if(tip!=n-1)

            {

                tip++;

                if(tip>mtipd)

                {

                    mtipu++;

                    mtipd++;

                }

            }



        }

    }

    for(int i=mtipu;i<=mtipd;i++)//输出歌单

    {

        cout<<de[i]<<' ';

    }

    cout<<endl;

    cout<<de[tip];

    }

}



int main() {

    int n;

    cin>>n;

    string s;

    cin>>s;

    showmenu(n, s);

    return 0;



}

// 64 位输出请用 printf("%lld")

#include <iostream>

#include<algorithm>//算法头文件

using namespace std;

string findcomstr(string &s1,string &s2)//发现公共子串的函数

{

    int mark=-1;//标记公共子串的第一个字符的位置

    int max=0;//最大公共子串的长度

    int m=s1.size();

    int n=s2.size();

    if(m<=n)//如果子串1短

    {

    for(int i=0;i<s1.size();i++)//循环串1

    {

        for(int j=0;j<s2.size();j++)//循环串2

        {

        int k=0;//统计公共子串个数

        tip:

        if(s1[i+k]==s2[j+k])//如果出现公共字符,那么k++(比较完i+k(0)的字符,再比较i+k(1)的字符,这样就能找出子串长度,长度为k)

        {

            k++;

            goto tip;//循环

        }

        if(k>max)//如果k》max,说明max不是最长子串,更新max,并且更新子串位置

        {

            max=k;

            mark=i;

        }

        }



    }

     return s1.substr(mark,max);//返回子串

    }

    else//如果子串2短

    {

       for(int i=0;i<n;i++)//和上一端代码相同,大家将就着看,看明白一段代码,就全明白了

        {

        for(int j=0;j<m;j++)

        {

        int k=0;

        tip2:

        if(s2[i+k]==s1[j+k])

        {

            k++;

            goto tip2;

        }

        if(k>max)

        {

            max=k;

            mark=i;

        }

        }



        }

         return s2.substr(mark,max);

    }

   // return s1.substr(mark,max);

   

}

int main() {

    string s1,s2;

    cin>>s1>>s2;

    //cout<<s1.size()<<"   "<<s2.size()<<endl;//测试

    cout<<findcomstr(s1,s2);

}

// 64 位输出请用 printf("%lld")

#include <iostream>

#include<string>

#include<cstring>

#include<sstream>

using namespace std;

string matchcom(string &s)

{

   

    stringstream ss(s);//可以获取以空格为分割的字符串

    string t[2]={"",""};//把两个字符串置为空

    ss>>t[0];//读取空格前的字符串

    ss>>t[1];//读取空格后的字符串



    string map0="reset";//特殊情况,这个命令只有一个单词

    string map[5][3]={{"reset","board","board fault"},{"board","add","where to add"},

                               {"board","delete","no board at all"},{"reboot","backplane","impossible"},

                               {"backplane","abort","install first"}};

    //上边是字符串命令的第一个单词,第二个单词,以及对应的命令

    if(t[1]=="")//如果输入的单词只有一个,也就是第二个单词是空

    {

        if(map0.find(t[0])==0)//如果第一个单词能够匹配

        {

            return "reset what";//返回

        }

        else

        {

            return "unknown command";//第一个单词不匹配

        }

       

    }

    else

    {

        int count=0;//计算有多少个匹配值,应该只有一个匹配值,否则就是不清楚匹配那个

        string str;//保存匹配的字符串

        for(int i=0;i<5;i++)//循环命令

        {

            if(map[i][0].find(t[0])==0&&map[i][1].find(t[1])==0)//如果第一个和第二个单词都匹配

            {

                count++;//计数器加一

                str=map[i][2];//保存这个转化后的命令

            }

        }

        if(count==1)//如果计数器正好是一个,表示正还有一个命令匹配

        {

            return str;//返回这个转化后的命令

        }

        else//如果这个计数器不是1,也就是可能没有匹配或者多个匹配

        {

            return "unknown command";//返回错误命令

        }

    }

}



int main() {

    string s;

    while(getline(cin,s))//循环读取一行字符串

    {

        cout<<matchcom(s)<<endl;//输出判断

    }

    return 0;

}

// 64 位输出请用 printf("%lld")

#include <cstdlib>

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

double result(double a,double b,char ops)

{

    switch(ops)

    {

        case '+':

        return a+b;

        case '-':

        return a-b;

        case '*':

        return a*b;

        case '/':

        return a/b;

    }

    return 0;

}

bool check(vector<double>&nums)

{

    char ops[4]={'+','-','*','/'};

    sort(nums.begin(),nums.end());

    do

    {

        for(int i=0;i<4;i++)

        {

            for(int j=0;j<4;j++)

            {

                for(int k=0;k<4;k++)

                {

                    double num1=result(nums[0],nums[1],ops[i]);

                    double num2=result(num1,nums[2],ops[j]);

                    double num3=result(num2,nums[3],ops[k]);

                    if(num3==24)

                    {

                        return true;

                    }

                }

            }

        }



    }while(next_permutation(nums.begin(), nums.end()));

    return false;



}

int main()

{

    vector<double>nums(4);

    cin>>nums[0]>>nums[1]>>nums[2]>>nums[3];

    if(check(nums)==true)

    cout<<"true"<<endl;

    else

    cout<<"false"<<endl;

    return 0;



   

}

#include <functional>

#include <iostream>

#include <utility>

using namespace std;

#include<map>



void sortprint(int sortselect,int n)

{

    if(sortselect==1)

    {

        multimap<int ,string>m;//升序插

        for(int i=0;i<n;i++)

        {

            string value;

            int key;

            cin>>value>>key;

            m.insert(make_pair(key,value));

        }

        for(auto i:m)

        {

            cout<<i.second<<" "<<i.first<<endl;

        }

    }

    else

    {//降序插

        multimap<int ,string,greater<int>>m;

        for(int i=0;i<n;i++)

        {

            string value;

            int key;

            cin>>value>>key;

            m.insert(make_pair(key,value));

        }

        for(auto i:m)

        {

            cout<<i.second<<" "<<i.first<<endl;

        }

    }

}



int main() {

    int n=0;

    cin>>n;

    int sortselect=0;

    cin>>sortselect;

    // multimap<int,string>m;

    // for(int i=0;i<n;i++)

    // {

    //     string value;

    //     int key;

    //     cin>>value>>key;

    //     m.insert(make_pair(key,value));

    // }

    sortprint(sortselect,n);

    return 0;

}

// 64 位输出请用 printf("%lld")

#include <iostream>

#include <locale>

using namespace std;

#include<deque>



int main() {

    int x,y,a,b;

    cin>>x>>y>>b;

    a=y;

    deque<deque<int>>d1;

    deque<deque<int>>d2;

    for(int i=0;i<x;i++)

    {

        d1.push_back(deque<int>());

        for(int j=0;j<y;j++)

        {

            int t;

            cin>>t;

            d1[i].push_back(t);

        }

    }

    for(int i=0;i<a;i++)

    {

        d2.push_back(deque<int>());

        for(int j=0;j<b;j++)

        {

            int t;

            cin>>t;

            d2[i].push_back(t);

        }

    }

    deque<deque<int>>c(x,deque<int>(b));

    int sum=0;

    for(int i=0;i<x;i++)

    {

        for(int j=0;j<b;j++)

        {

            for(int m=0,n=0;m<y&&n<a;n++,m++)

            {  

                sum=sum+d1[i][m]*d2[n][j];

            }

            c[i][j]=sum;

            sum=0;

        }

    }

    for(int i=0;i<x;i++)

    {

        for(int j=0;j<b;j++)

        {

            cout<<c[i][j]<<" ";

        }

        cout<<endl;

    }

    return 0;

}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

#include<deque>

void print_100()

{

    for(int x=0;x<=20;x++)

    {

        for(int y=0;y<=33;y++)

        {

            for(int z=0;z<=100;z++)

            {

                int money=0;

                int size=0;

                money=5*x+3*y+z;

                size=x+y+3*z;

                if(money==100&&size==100)

                {

                    cout<<x<<' '<<y<<' '<<3*z<<endl;

                }

            }

        }

    }

   

}

int main() {

    int start;

    cin>>start;

    print_100();

    return 0;

}

#include <iostream>

using namespace std;

bool check(int x)

{

    if((x%400==0)||(x%4==0&&x%100!=0))

    {

        return true;

    }

    return false;

}

int date1[]={31,28,31,30,31,30,31,31,30,31,30,31};

int date2[]={31,29,31,30,31,30,31,31,30,31,30,31};

int main() {

    int y,m,d;

    cin>>y>>m>>d;

    int sum=0;

    if(check(y)==true)

    {

        for(int i=0;i<m-1;i++)

        {

            sum=sum+date2[i];

        }

        sum=sum+d;

    }

    else

    {

        for(int i=0;i<m-1;i++)

            {

                sum=sum+date1[i];

            }

            sum=sum+d;

    }

    cout<<sum;

    return 0;



}

// 64 位输出请用 printf("%lld")

#include<iostream>

#include<string>

using namespace std;

int main()

{

    string s;

    getline(cin,s);

    int length=s.length();

    int num=0;

    for(int i=0;i<length;i++)

    {

        if(s[i]=='"')

        {

            i++;

            while(s[i]!='"')

            {

                i++;

            }

        }

        else if(s[i]==' ')

        {

            num++;

        }

    }

    cout<<num+1<<endl;

    for(int i=0;i<length;i++)

    {

        if(s[i]=='"')

        {

            i++;

            while(s[i]!='"')

            {

                cout<<s[i];

                i++;

            }

        }

        else if(s[i]==' ')

        {

            cout<<endl;

        }

        else {

        cout<<s[i];

        }

    }

    return 0;

}

#include <iostream>

using namespace std;

#include<algorithm>



int main() {

    string a,b;

    cin>>a>>b;

    int max=0;

    if(a.length()>b.length())

    {

        swap(a,b);

    }

    //cout<<a<<" "<<b;

    for(int i=0;i<=a.length()-1;i++)

    {

        for(int j=i;j<a.length();j++)

        {

            string com=a.substr(i,j-i+1);

            if(b.find(com)==string::npos)

            {

                continue;

            }

            else if(b.find(com)!=string::npos)

            {

               

                if(com.size()>max)

                {

                    max=com.size();

                }

            }



        }

    }

    cout<<max;



}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

#include<string>



int main() {

    int n=0;

    cin>>n;

    int n_3=n*n*n;

    for(int i=1;i<n_3-2*n;i=i+2)

    {

        int sum=0;

        for(int j=i;j<i+2*n;j=j+2)

        {

           sum=sum+j;

        }

        if(sum==n_3)

        {

            for(int j=i;j<i+2*(n-1);j=j+2)

            {

                cout<<j<<'+';

            }

            cout<<i+2*n-2;

        }

    }



   

}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

#include<deque>

#include<algorithm>

#include<stack>

bool check(deque<int>&nums,deque<int>&kind)

{

    stack<int>problem;

    int tip=0;

    for(int i=0;i<nums.size();i++)

    {

        problem.push(nums[i]);

        while(tip<nums.size()&&problem.size()!=0&&kind[tip]==problem.top())

        {

            tip++;

            problem.pop();

        }

    }

    return problem.empty();

}

int main() {

    int n;

    cin>>n;

    deque<int>nums(n);

    for(auto &i:nums)

    {

        cin>>i;

    }

    deque<int>kind=nums;

    sort(kind.begin(),kind.end());

    do

    {

        if(check(nums,kind)==true)

        {

            for(int i=0;i<n;i++)

            {

                cout<<kind[i]<<" ";

            }

            cout<<endl;

        }

    }while(next_permutation(kind.begin(), kind.end()));

    return 0;

}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;

#include<map>

#include<set>



int main() {

    set<int>s;

    int t;

    int n;

    cin>>n;

    for(int i=0;i<n;i++)

    {

        cin>>t;

        s.insert(t);

    }

    cin>>n;

    for(int i=0;i<n;i++)

    {

        cin>>t;

        s.insert(t);

    }

    for(auto i:s)

    {

        cout<<i;

    }

    return 0;



}

// 64 位输出请用 printf("%lld")

#include <iostream>

using namespace std;



int main() {

    string a,b;

    cin>>a>>b;

    for(int i=0;i<a.size();i++)

    {

        if(b.find(a[i])==string::npos)

        {

            cout<<"false"<<endl;

            return 0;

        }

    }

    cout<<"true";

    return 0;

}

// 64 位输出请用 printf("%lld")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值