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\n",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\n%d\n",n);
    }
    return 0;
}
View Code

 

posted @ 2020-11-08 20:46  一只幽灵飘过  阅读(96)  评论(0编辑  收藏  举报