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
原文地址:https://www.cnblogs.com/buerdepepeqi/p/8647111.html