• ACM 实验室2020.11.01天梯赛练习*4


    7-1 Hello World! (5分)

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        cout<<"Hello World!"<<endl;
        return 0;
    }
    View Code

    7-2 电子汪 (10分)

    在一行中输出 A + B 个Wang!

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a,b;
        cin>>a>>b;
        for(int i=0;i<a+b;i++){
            cout<<"Wang!";
        }
        return 0;
    }

    7-3 大笨钟 (10分)

    给出一个时间,十二点之前,输出“Only hh:mm. Too early to Dang.”,十二点之后,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int a,b;
        scanf("%d:%d",&a,&b);
        if(a<12){
            printf("Only %02d:%02d.  Too early to Dang.",a,b);
        }else if(a==12){
            if(b!=0){
                printf("Dang");
            }else{
                printf("Only %02d:%02d.  Too early to Dang.",a,b);
            }
            
        }
        
        else{
            for(int i=0;i<a-12;i++){
                printf("Dang");
            }
            if(b!=0){
                printf("Dang");
            }
        }
        return 0;
    }

    7-4 个位数统计 (15分)

    一个不超过 1000 位的正整数 N,统计各个位上数字的出现次数,按顺序输出

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        string s;
        cin>>s;
        int a[20]={0},i;
        for(i=0;i<s.length();i++){
            a[s[i]-'0']++;
        }
        for(i=0;i<=9;i++){
            if(a[i]!=0)
            cout<<i<<":"<<a[i]<<endl;
        }
        return 0;
    }

    7-5 古风排版 (20分)

    按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)

    将字符串每位依次存入n个数组,将n个数组依次逆序输出

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,flag=0,i,j,maxx=0;
        cin>>n;
        getchar();
        string s;
        char a[110][1010];
        int b[110];
        getline(cin,s);
        //This is a test case
        for(i=0;i<n;i++){
            int k=0;
           for(j=i;j<s.length();j+=n){
              a[i][++k]=s[j];
              //cout<<s.length()<<endl;
           }
           b[i]=k;
           //cout<<k<<endl;
           maxx=max(k,maxx);
        }
        for(i=0;i<n;i++){
            if(b[i]==maxx){
                for(j=0;j<b[i];j++){
                    cout<<a[i][b[i]-j];
                }
            }
            if(b[i]==maxx-1){
                cout<<" ";
                for(j=0;j<b[i];j++){
                    cout<<a[i][b[i]-j];
                }
            }
            cout<<endl;
        }
        return 0;
    }

    7-7 PTA使我精神焕发 (5分)

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    cout<<"PTA shi3 wo3 jing1 shen2 huan4 fa1 !"<<endl;
        return 0;
    }

    7-8 稳赢 (15分)

    根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
    
        int n,flag=0;
        cin>>n;
        string s;
        cin>>s;
        while(s!="End"){
            flag++;
           if(flag>n){
            cout<<s<<endl;
            flag=0;
           }else{
             if(s=="ChuiZi")
                cout<<"Bu"<<endl;
             else if(s=="JianDao")
                cout<<"ChuiZi"<<endl;
            else if(s=="Bu")
                cout<<"JianDao"<<endl;
           }
           cin>>s;
        }
        return 0;
    }

    7-10 人以群分 (25分)

    将n个数排序,求出前半部分和后半部分的差

    #include<bits/stdc++.h>
    using namespace std;
    int a[100010];
    int main()
    {
        int n,i;
        long long sum=0,sum2=0;
        cin>>n;
        for(i=0;i<n;i++){
            cin>>a[i];
            sum+=a[i];
        }
        sort(a,a+n);
        for(i=0;i<n/2;i++){
            sum2+=a[i];
        }
        cout<<"Outgoing #: "<<n/2+n%2<<endl;
        cout<<"Introverted #: "<<n/2<<endl;
        cout<<"Diff = "<<sum-sum2-sum2<<endl;
        return 0;
    }

    7-6 连续因子 (20分)

    给出一个数字n,求出最小连续因子的个数,并输出最小的连续因子序列

    参考大佬代码

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int main(){
        int n,sum,flag;
        scanf("%d",&n);
        for(int i = 13;i >= 1;i--){
            for(int j = 2;j <= sqrt(n);j++){
              sum = 1,flag = 0;
                for(int k = 0;k < i;k++){
                    sum = sum * (j + k);
                    if(sum > n){
                        break;
                    }
                }
                if(sum <= n && n % sum == 0){
                    printf("%d
    ",i);
                    for(int k = 0;k < i;k++){
                        if(k == 0){
                            printf("%d",j + k);
                        }
                        else{
                            printf("*%d",j +k);
                        }
                    }
                    flag = 1;
                }
                if(flag == 1){
                    break;
                }
            }
            if(flag == 1){
                break;
            }
        }
        if(n == 2 || n == 3 || flag == 0){
        //n == 2 和 n == 3 需要特殊判断下,因为sqrt(2),sqrt(3)都小于2,第一个循环进不去
            printf("1
    %d
    ",n);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    无锁队列的实现
    C/C++语言中闭包的探究及比较
    Linus:利用二级指针删除单向链表
    Unix考古记:一个“遗失”的shell
    “C++的数组不支持多态”?
    Alan Cox:单向链表中prev指针的妙用
    二叉树迭代器算法
    C语言全局变量那些事儿
    数据即代码:元驱动编程
    C++模板”>>”编译问题与词法消歧设计
  • 原文地址:https://www.cnblogs.com/a-specter/p/13942779.html
Copyright © 2020-2023  润新知