• 计蒜客 《程序设计竞赛体验课程》第一部分 快速提升代码能力


    这一部分内容比较简单 直接把代码发上来 不想自己写的同学可以直接抱走~


    练习题:a+b 问题

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,x,y;
        cin>>n;
        while(n--)
        {
            cin>>x>>y;
            cout<<x+y<<endl;
        }
    }

    练习题:斐波那契数列

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n;
        cin>>n;
        int a=1,b=1,c,i;
        if(n>2)
        {
            for(i=3;i<=n;i++)
            {
                c=(a+b)%1000000007 ;
                a=b;
                b=c;
            }
            cout<<c<<endl;
        }
        else
            cout<<1<<endl;
    }

    练习题:矩阵旋转

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,m,i,j,a[205][205];
        cin>>n>>m;
        for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
        for(i=1;i<=m;i++)
        {
            cout<<a[n][i];
            for(j=n-1;j>=1;j--)
            {
                cout<<' '<<a[j][i];
            }
            cout<<endl;
        }
     } 

    练习题:最大子阵

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,sums,anss,i,j,a[55][55],s[55][55],k;
    int main()
    {
        cin>>n>>m;
        for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            cin>>a[i][j];
            s[i][j]=s[i-1][j]+a[i][j];
        }
        anss=-0x7ffffff;
        for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
        {
            sums=0;
            for(k=1;k<=m;k++)
            {
                if(sums>=0)
                sums+=s[j][k]-s[i-1][k];
                else
                sums=s[j][k]-s[i-1][k];
                if(sums>anss)
                anss=sums;
            }
        }
        cout<<anss<<endl;
    }

    练习题:四平方和

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,a,b,c,d;
        cin>>n;
        for(a=0;a*a<n;a++)
        {
            for(b=a;b*b+a*a<n;b++)
            {
            for(c=b;c*c+b*b+a*a<n;c++)
            {
                if(sqrt(n-a*a-b*b-c*c)==(int)sqrt(n-a*a-b*b-c*c))
                {
                    cout<<a<<' '<<b<<' '<<c<<' '<<(int)sqrt(n-a*a-b*b-c*c)<<endl;
                    return 0;
                }
            }
            }
        }
    }

    练习题:A+B 问题

    #include<bits/stdc++.h>
    
    using namespace std;
    int n,lena,lenb,ai,bi,jin,lenmax,p,q,i,t=0;
    int anss[100000];
    int main()
    {
        memset(anss,0,sizeof(anss));
        jin=0;
        string a;
        string b;
        cin>>a;
        cin>>b;
        lena=a.size();
        lenb=b.size();
        lenmax=max(lena,lenb);
        p=lena-1;
        q=lenb-1;
        for(i=lenmax-1;i>=0;i--)
        {
            if(p<0)
            ai='0';
            else
            ai=a[p];
            if(q<0)
            bi='0';
            else
            bi=b[q];        
            anss[i]=(ai-'0'+bi-'0'+jin)%10;
            jin=(ai-'0'+bi-'0'+jin)/10;
            p--;
            q--;
        }
        if(jin)
        cout<<jin;
        for(i=0;i<lenmax;i++)
        cout<<anss[i];
        cout<<endl;
    }

    练习题:A*B 问题

    #include<iostream>
    #include<string>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int main(){
        string A,B;
        int ReverseA[1000+5];
        int ReverseB[1000+5];
        int a[1000+5];
        memset(a,0,sizeof(a));
        cin>>A>>B;
        int lenA = A.length();
        int lenB = B.length();
        // 得到逆转数组 
        for(int i=0;i<lenA;i++)
            ReverseA[i] = A[lenA-i-1]-'0';
        for(int i=0;i<lenB;i++)
            ReverseB[i] = B[lenB-i-1]-'0';
        // 计算 
        for(int i=0;i<lenA;i++)
            for(int j=0;j<lenB;j++){
                a[i+j] += ReverseA[i]*ReverseB[j];
                // 处理进位 
                if(a[i+j]>=10){
                    a[i+j+1] += a[i+j]/10;
                    a[i+j] %= 10;
                }
            }
        // 控制输出 
        bool flag = false;
        for(int i=lenA+lenB;i>=0;i--){
            if(a[i] && !flag || i==0)  // 答案为 0 的特殊情况 
                flag = true;
            else if(!a[i] && !flag)
                continue;    
            cout<<a[i];
        }
        return 0;
    }

    练习题:蒜头君的随机数

    #include<bits/stdc++.h>
    
    using namespace std;
    
    set<int>a;
    
    int main()
    {
        int n,x;
        cin>>n;
        while(n--)
        {
            cin>>x;
            a.insert(x);
        }
        cout<<a.size()<<endl;
        set<int>::iterator it;
        bool flag=true;
        for(it=a.begin();it!=a.end();it++)  
        {
            if(flag)
            {
                cout<<*it;
                flag=!flag;
            }
            else
            cout<<' '<<*it;
        }
    
    
    }

    练习题:交叉排序

    #include<bits/stdc++.h>
    
    using namespace std;
    
    bool cmp(int a,int b)
    {
        return a>b;
    }
    
    int main()
    {
        int n,i,l1,l2,r1,r2,a[100005];
        cin>>n>>l1>>r1>>l2>>r2;
        for(i=1;i<=n;i++)
        cin>>a[i];
        sort(a+l1,a+r1+1);
        sort(a+l2,a+r2+1,cmp);
        cout<<a[1];
        for(i=2;i<=n;i++)
        {
            cout<<' '<<a[i];
        }
    }

    练习题:进制转换

    #include<bits/stdc++.h>
    
    using namespace std;
    stack<int>a;
    int main()
    {
        int x,n,r,flag=0;
        cin>>n>>r;
        if(n<0)
        {
            flag=1;
            n=abs(n);
        }
        while(n>0)
        {
            a.push(n%r);
            n=n/r;
        }
        if(a.empty())
        {
            cout<<0<<endl;
            return 0;
        }
        if(flag==1)
        cout<<'-';
        while(!a.empty())
        {
            x=a.top();
            if(x>=10)
            cout<<char(x-10+'A');
            else
            cout<<x;
            a.pop();
        }
    }

    练习题:回文数

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int sum=0;
    queue <int> qq;
    void panduan (int n)
    {
        string s;
        int m=n;
        while(m)
        {
            s+=m%10+'0';
            m=m/10;
        }
        string k=s;
        reverse(k.begin(),k.end());
        if(s==k)
        {
            //cout<<sum<<endl;
            //cout<<k<<endl;
            qq.push(n);
            return;
        }
    
        else
        {    //cout<<"s:"<<s<<' '<<"k:"<<k<<endl; 
            int l=0;
            for(int i=0;i<s.size();i++)
            {
                //cout<<pow(10,i)*(k[i]-'0')<<endl;+
                l+=pow(10,i)*(k[i]-'0');
            }
            //cout<<l<<endl;
            //cout<<n<<"--->";
            qq.push(n);
            sum++;
            panduan(l+n);
        }
    }
    
    int main()
    {
        int n;
        cin>>n;
        panduan(n);
        cout<<sum<<endl;
        while(sum>=1)
        {
            cout<<qq.front()<<"--->";
            qq.pop();
            sum--;
        }
        cout<<qq.front()<<endl;
    }

    练习题:机器人

    #include<bits/stdc++.h>
    using namespace std;
    
    int x,y;
    
    void go(int f,int l)
    {
        if(f==1)
        {
            x+=l;
        }
        else if(f==2)
        {
            y+=l;
         } 
        else if(f==3)
        {
            x-=l;
        }
        else if(f==4)
        {
            y-=l;
        }
    }
    
    
    int main()
    {
        int n,s;
        cin>>n;
        int f=1;
        string str;
        while(n--)
        {
            cin>>str>>s;
            if(str=="forward")
            {
                go(f,s);
                //cout<<x<<' '<<y<<' '<<f<<endl;
            }
            else if(str=="back")
            {
                if(f==1)
                go(f=3,s);
                else if(f==2)
                go(f=4,s);
                else if(f==3)
                go(f=1,s);
                else if(f==4)
                go(f=2,s);
                //cout<<x<<' '<<y<<' '<<f<<endl;
            }
            else if(str=="left")
            {
                if(f==1)
                go(f=2,s);
                else if(f==2)
                go(f=3,s);
                else if(f==3)
                go(f=4,s);
                else if(f==4)
                go(f=1,s);
                //cout<<x<<' '<<y<<' '<<f<<endl;
            }
            else if(str=="right")
            {
                if(f==1)
                go(f=4,s);
                else if(f==2)
                go(f=1,s);
                else if(f==3)
                go(f=2,s);
                else if(f==4)
                go(f=3,s);
                //cout<<x<<' '<<y<<' '<<f<<endl;
            }
        }
        cout<<x<<' '<<y<<endl;
    }

    练习题:表达式求值

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int x,temp,anss;
        char c;
        cin>>x;
        temp=x;
        anss=0;
        while(cin>>c>>x)
        {
            if(c=='+')
            {
                anss+=temp%10000;
                anss=anss%10000;
                temp=x%10000;
            }
            else if(c=='*')
            {
                temp*=x%10000;
                temp=temp%10000;
            }
            //cout<<anss<<endl;
        }
        anss+=temp%10000;
        cout<<anss%10000<<endl;
     } 

    练习题:HZF 爱斗牛

    #include<bits/stdc++.h>
    using namespace std;
    int i,sum,flag,a[20],s[20],j,x;
    int main()
    {
        for(i=1;i<=5;i++)
        {
            cin>>a[i];
            s[a[i]]++;
        }
        for(i=1;i<=13;i++)
        {
            if(s[i]>=4)
            {
                cout<<"quadra bomb orz"<<endl;
                return 0;
            }
        }
        sum=0;
        flag=0;
        for(i=1;i<=5;i++)
        {
            if(a[i]>=5)
            {
                flag=1;
                break;
            }
            sum+=a[i];
        }
        if(flag==0&&sum<=10)
        {
            cout<<"penta calf"<<endl;
            return 0;
        }
        sum=0;
        for(i=1;i<=5;i++)
        {
            if(a[i]>10)
            {
                a[i]=10;
            }
            sum+=a[i];
        }
        for(i=1;i<=4;i++)
        {
            for(j=i+1;j<=5;j++)
            {
                if((a[i]+a[j])%10==0&&((sum-a[i]-a[j])%10==0))
                {
                    cout<<"you can you up"<<endl;
                    return 0;
                }
            }
        }
        for(x=1;x<=9;x++)
        {
            for(i=1;i<=4;i++)
            {
                for(j=i+1;j<=5;j++)
                {
                    if((a[i]+a[j])%10==x&&((sum-a[i]-a[j])%10==0))
                    {
                        cout<<"too young too simple:calf "<<x<<endl;
                        return 0;
                    }
                }
            }
         } 
         cout<<"gg"<<endl;
    }

    练习题:显示屏输出

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <set>
    using namespace std;
    char pic[10][5][2]=
    {
        //  第1行  第2行   第3行  第4行   第5行(1,3,5行,也就是日字的三横只有一笔,所以pic[1~10][{1,3,5}][1]=' ')
        {{'-',' '},{'|','|'},{' ',' '},{'|','|'},{'-',' '}},//数字0的第一行,第二行,第三行……
        {{' ',' '},{' ','|'},{' ',' '},{' ','|'},{' ',' '}},//数字1的第一行,第二行,第三行……
        {{'-',' '},{' ','|'},{'-',' '},{'|',' '},{'-',' '}},
        {{'-',' '},{' ','|'},{'-',' '},{' ','|'},{'-',' '}},
        {{' ',' '},{'|','|'},{'-',' '},{' ','|'},{' ',' '}},
        {{'-',' '},{'|',' '},{'-',' '},{' ','|'},{'-',' '}},
        {{'-',' '},{'|',' '},{'-',' '},{'|','|'},{'-',' '}},
        {{'-',' '},{' ','|'},{' ',' '},{' ','|'},{' ',' '}},
        {{'-',' '},{'|','|'},{'-',' '},{'|','|'},{'-',' '}},
        {{'-',' '},{'|','|'},{'-',' '},{' ','|'},{'-',' '}}
    };
    int main()
    {
       int ex,cnt=0,num[10];
       char str[100];
       cin>>ex;
       cin>>str;
       for(int i=0;str[i]!='';i++)
         num[i]=str[i]-'0';
        cnt = strlen(str);
        
       for(int row=1;row<=5;row++)//日字一共有5行
       {
           if(row%2==1)//日字的三横
           {
               for(int i=0;i<cnt;i++)//数字
               {
                    cout<<" ";
                    for(int j=0;j<ex;j++)//放大的倍数
                        cout<<pic[num[i]][row-1][0];
                    cout<<" ";
                    if(i!=cnt-1)
                        cout<<" ";
               }
               cout<<endl;
           }else{
                for(int i=0;i<ex;i++)//'|'放大的倍数
                {
                    for(int j=0;j<cnt;j++)//数字
                    {
                        char a,b;
                        a=pic[num[j]][row-1][0];
                        b=pic[num[j]][row-1][1];
                        cout<<a;
                        for(int k=0;k<ex;k++)
                            cout<<" ";
                        cout<<b;
                        if(j!=cnt-1)
                        cout<<" ";
                    }
                    cout<<endl;
                }
           }
       }
    }

    练习题:得到整数 X

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int x,n,i,j,a[30];
        cin>>n>>x;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        int anss=0,sum=0;
        for(i=1;i<1<<n;i++)
        {
            sum=0;
            for(j=0;j<n;j++)
            {
                if(i&(1<<j))
                {
                    sum+=a[j];
                }
            }
            if(sum==x)
            anss++;
        }
        cout<<anss<<endl;
    }

    练习题:幼儿园买玩具

    #include<bits/stdc++.h>
    
    using namespace std;
    int n,m,k,sum,anss=0,a[105][20],flags[20],flag,i,j,p,u,s;
    int main()
    {
        cin>>n>>m>>k;
        for(i=1;i<=n;i++)
        {
            cin>>a[i][0];
            for(j=1;j<=a[i][0];j++)
            {
                cin>>a[i][j];
            }
        }
        for(i=1;i<1<<k;i++)
        {
            s=0;
            memset(flags,0,sizeof(flags));
            for(j=0;j<k;j++)
            {
                if(1<<j&i)
                {
                    s++;
                    flags[j]=1;
                }
            }
            if(s<=m)
            {
                sum=0;
                for(p=1;p<=n;p++)
                {
                    flag=1;
                    for(u=1;u<=a[p][0];u++)
                    {
                        if(flags[a[p][u]-1]==0)
                        {
                            flag=0;
                            break;
                        }
                    }
                    if(flag)
                    sum++;
                }
                if(sum>anss)
                anss=sum;
            }
        }
        cout<<anss<<endl;
    }

    练习题:islands 打炉石传说

    #include<bits/stdc++.h>
    
    using namespace std;
    
    typedef struct 
    {
        int cost;
        int d;
        int w;
    }node;
    node a[15];
    int n,i,j,anss,sum,s,flag;
    int main()
    {
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>a[i].cost>>a[i].d>>a[i].w;
        }
        anss=0;
        for(i=1;i<1<<n;i++)
        {
            sum=0;
            s=0;
            flag=0;
            for(j=0;j<n;j++)
            {
                if(1<<j&i)
                {
                    if(a[j].d==0)
                        flag=1;
                    sum+=a[j].w;
                    s+=a[j].cost;
                }
            }
            if(s<=10&&sum>anss&&flag)
            anss=sum;
        }
        cout<<anss<<endl;
    }
  • 相关阅读:
    算法之冒泡排序
    实现秒杀的几个想法(续)
    乐观锁
    wifi-sdio接口
    解压vmlinuz和解压initrd(initramfs)
    supplicant
    wpa_supplicant测试
    qu
    netlink
    wpa_supplicant安装
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/11576037.html
Copyright © 2020-2023  润新知