zoukankan      html  css  js  c++  java
  • PAT团体程序设计大赛---(模拟)

    L1-1 古风排版(20 分)

    中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

    输入格式:

    输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

    输出格式:

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

    输入样例:

    4
    This is a test case
    

    输出样例:

    asa T
    st ih
    e tsi
     ce s

    思路:1.输入记得防止被吃空格

       2.二维数组逆序来存字符串,一共有N行,那么就一共有strlen(str)/N 列,向上 取整

       3.注意,str的最后一个字符存完后要检查二维字符数组的第一列是否有N行,如果没有要用空格补齐

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    char Cmap[1005][1005];
    int main()
    {
      int n,m;
      char s[1005];
      cin >> n;
      getchar(); //用这个来接收空格 
      gets(s);
      int len = strlen(s);
      m = len/n;
      if(len%n != 0) m++; 
      int i = 0;
      for(int k = m-1; k >= 0; k--){
        for(int j = 0; j < n; j++){
          if(i < len)
            Cmap[j][k] = s[i++];
          else
            Cmap[j][k] = ' '; //当长度超过len时直接赋值空格。 
        }
      }
      for(int j = 0; j < n; j++){ // 最后输出。 
        for(int k = 0; k < m; k++)
          cout << Cmap[j][k];
        cout << endl;
      }
      return 0;
    }
    View Code

    L1-2 大笨钟(10 分)

    微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。

    下面就请你写个程序,根据当前时间替大笨钟敲钟。

    输入格式:

    输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。

    输出格式:

    根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:

    Only hh:mm.  Too early to Dang.
    

    其中hh:mm是输入的时间。

    输入样例1:

    19:05
    

    输出样例1:

    DangDangDangDangDangDangDangDang
    

    输入样例2:

    07:05
    

    输出样例2:

    Only 07:05.  Too early to Dang.
    #include<stdio.h>
    #include<string.h>
    int main() {
        int h,m;
        scanf("%d:%d",&h,&m);
        if((h==12&&m>0)||(h>12&&h<24)) {
            h-=12;
            int i;
            if(m>0)
                h+=1;
            for(i=0; i<h; i++)
                printf("Dang");
            printf("
    ");
        }
        else if(h==24)
            h=0;
        else
            printf("Only %02d:%02d.  Too early to Dang.
    ",h,m);
        return 0;
    }
    View Code

    L1-3 宇宙无敌加法器(20 分)

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。

    在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201。

    输入格式:

    输入首先在第一行给出一个 N 位的进制表(0 < N ≤ 20),以回车结束。 随后两行,每行给出一个不超过 N 位的非负的 PAT 数。

    输出格式:

    在一行中输出两个 PAT 数之和。

    输入样例:

    30527
    06203
    415
    

    输出样例:

    7201

    思路:1. 先将两个数的位数给补的一样,方便与计算,直接用string 这样前面的000还可以和后面的xxx直接连接起来
       2.从最后一个开始相加,用string直接连起来比较方便,不用*pow(10,x)
       3.进制的转换,k进制的话直接用两者之和%k就得到他的十进制数了,注意进位的情况
    4.输出要注意首部为0的情况,用一个tag进行标记,首字母不为0才输出
       5.坑点 0 0 的情况
    #include<iostream>
    using namespace std;
    int main(){
        string radix,num1,num2;
        cin>>radix>>num1>>num2;
        if(num1.length()>num2.length()){
            string temp="";
            for(int i=0;i<num1.length()-num2.length();i++){
                temp+="0";
            }
            num2=temp+num2;
        }
        if(num1.length()<num2.length()){
            string temp="";
            for(int i=0;i<num2.length()-num1.length();i++){
                temp+="0";
            }
            num1=temp+num1;
        }
         int temp=radix.length()-1;
         int carry=0;  //进位
         string result="";
         //对各个位进行计算
         for(int i= num1.length()-1;i>=0;i--){
            int sum=(num1[i]-'0')+(num2[i]-'0')+carry;
            int r=radix[temp]-'0';
            temp--;
            if(r==0){
                r=10;
            }
            carry=sum/r;
            result=(char)(sum%r+'0')+result;
         }
         //有进位并且还有进制
         while(carry != 0&&temp>=0)
         {
             int sum=carry;
             int r=radix[temp]-'0';
             temp--;
             if(r==0){
                r=10;
             }
             carry=sum/r;
             result=(char)(sum%r+'0') + result;
         }
         if(carry!=0){
            result=(char)(carry+'0')+result;
         }
         int tag=0;
         for(int i=0;i<result.length();i++){
            if(tag==1){
                cout<<result[i];
                continue;
            }
            if(result[i]!='0'){
               if(tag==0) tag=1;
            cout<<result[i];
            }
         }
         if(tag==0) cout<<0;
        return 0;
    }
    /*
    View Code

    L1-4 情人节(15 分)

    以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

    输入格式:

    输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

    输出格式:

    根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”;若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”。

    输入样例1:

    GaoXZh
    Magi
    Einst
    Quark
    LaoLao
    FatMouse
    ZhaShen
    fantacy
    latesum
    SenSen
    QuanQuan
    whatever
    whenever
    Potaty
    hahaha
    .
    

    输出样例1:

    Magi and Potaty are inviting you to dinner...
    

    输入样例2:

    LaoLao
    FatMouse
    whoever
    .
    

    输出样例2:

    FatMouse is the only one for you...
    

    输入样例3:

    LaoLao
    .
    

    输出样例3:

    Momo... No one is for you ...
    思路:1.输入有技巧
       2.统计一下输入的名字数目即可
    #include<stdio.h>
    #include<string.h>
    char a[10000][20];
    int main()
    {
        int cnt=0;
        while(scanf("%s",a[cnt])==1&&a[cnt][0]!='.')
        {
            cnt++;
        }
        if(cnt<2)
        printf("Momo... No one is for you ...
    ");
        else if(cnt<14)
        printf("%s is the only one for you...
    ",a[1]);
        else 
        printf("%s and %s are inviting you to dinner...
    ",a[1],a[13]);
    }
    View Code

    这道超级简单的题目没有任何输入。

    你只需要把这句很重要的话 —— I Love GPLT ——竖着输出就可以了。

    所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char a[50]="I Love GPLT";
    int main()
    {
        int len=strlen(a);
        for(int i=0;i<len;i++){
            printf("%c
    ",a[i]);
        }
        return 0;
    }
    View Code

    L1-6 是不是太胖了(5 分)

    据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤是公斤的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)

    输入格式:

    输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。

    输出格式:

    在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。

    输入样例:

    169
    

    输出样例:

    124.2

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int H;
        while(scanf("%d",&H) !=EOF){
            printf("%.1lf
    ",2*((H-100)*0.9));
        }
        return 0;
    }
    View Code

    L1-7 到底是不是太胖了(10 分)

    据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

    输入格式:

    输入第一行给出一个正整数N≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。

    输出格式:

    为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!

    坑点:不要直接用浮点数,会有浮点误差

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
      int n;
      scanf("%d", &n);
      for(int i = 0; i < n; i++){
        int h, w;
        scanf("%d%d", &h, &w);
        w *= 50;
        int sw = (h - 100) * 9;
        if(w >= sw * 11) printf("You are tai pang le!
    ");
        else if(w <= sw * 9) printf("You are tai shou le!
    ");
        else printf("You are wan mei!
    ");
      }
      return 0;
    }
    View Code

    L1-8 外星人的一天(15 分)

    地球上的一天是 24 小时。但地球上还有一些精力和勤奋度都远超一般人的大神级人物,他们的“一天”是以 48 小时为周期运转的,这种人被人们尊称为“外星人”。比如普通人的周一早 8:30 是外星人的周一早 4:15;普通人的周二早 9:21 是外星人的周一下午 4:40 —— 对外星人而言,一周的工作时间只有三天(即普通人的周一至周六),周日他们会蒙头大睡恢复体力,时间对他们是没有意义的。

    在外星人眼里,地球人的时钟对他们而言实在是太不方便了。本题就请你为外星人们实现一款专用时钟。

    输入格式:

    输入在一行中给出一个不超过 10 的正整数 N,随后 N 行,每行给出一个地球人的时刻,格式为:Day hh:mm,其中Day是 [0,6] 区间内的整数,顺序代表周日至周六;hh是 24 小时制的小时数,是 [0,23] 区间内的整数;mm是分钟数,是 [0,59] 区间内的整数。

    输出格式:

    对输入的每一行地球人时刻,输出对应的外星人时间,格式与输入相同。其中Day在 [0,3] 区间内,对应周日到周三;分钟数若不是整数,则向下取整。注意:由于周日的时间对外星人没有意义,所以直接输出地球人的时间即可。

    输入样例:

    3
    1 08:30
    2 09:21
    0 21:07
    

    输出样例:

    1 04:15
    1 16:40
    0 21:07
    #include<bits/stdc++.h>
    using namespace std;  
      
    int main()  
    {  
        int n;  
        int a, b, c;  
        cin >> n;  
        for (int i = 0; i < n; i++)  
        {  
            scanf("%d%d:%d", &a, &b, &c);  
            if (a == 0)  
                printf("%d %02d:%02d
    ", a, b, c);  
            else  
            {  
                if (a%2==1)  
                {  
                    c = ((b % 2) * 60 + c) / 2;  
                    b = b / 2;  
                }  
                else  
                {  
                    b = b + 24;  
                    c = ((b % 2) * 60 + c) / 2;  
                    b = b / 2;  
                }  
                printf("%d %02d:%02d
    ", (a + 1) / 2, b, c);  
            }  
        }  
          
    }  
    View Code
    每一个不曾刷题的日子 都是对生命的辜负 从弱小到强大,需要一段时间的沉淀,就是现在了 ~buerdepepeqi
  • 相关阅读:
    input只允许输入正整数
    CSS如何作小于1PX的边
    时间戳的处理
    图片转base64上传,视频同理。
    APIcloud微信支付和支付宝支付(方案2,主要在后台进行)
    H5滑条(input type=range)
    checkbox/radio 样式修改
    APIcloud制作APP 微信支付与支付宝支付
    JS获取鼠标左(右)滑事件
    DOM(Document object madle) 文档对象模型: 元素节点 文本节点 属性节点
  • 原文地址:https://www.cnblogs.com/buerdepepeqi/p/8647111.html
Copyright © 2011-2022 走看看