『ACM C++』 PTA 天梯赛练习集L1 | 057-63

  好一段时间没继续肝题了,也打破了自己想每天刷题的习惯,大一生活真的是忙的我好累啊,基本每天都是非常充实的状态,留给自己的时间不是很多了。一个三下乡各种活动也是搞得我够呛,加上最近学校邀请拍摄宣传片也浪费我不少时间,大一也即将走到头了,很快就要高考了,这一年恍恍惚惚走的真的是很快很快,谁能想到现在我会这么生活呢?

  大二也开始收收心了,很多活动也不打算去参加了,连班委我也不打算继续竞选了,在大二好好专攻自己的学术,准备开始考研,静下心来提升自我,嗯,加油。

  最近要开始自己的补题计划了,还是一样,想把PTA的题先全补完,然后再去HDU和VJ

------------------------------------------------L1-057----------------------------------------------------------

PTA使我精神焕发

PTA使我精神焕发.jpg

以上是湖北经济学院同学的大作。本题就请你用汉语拼音输出这句话。

输入格式:

本题没有输入。

输出格式:

在一行中按照样例输出,以惊叹号结尾。

输入样例:

输出样例:

PTA shi3 wo3 jing1 shen2 huan4 fa1 !

------------------------------------------------L1-057----------------------------------------------------------

注解:水题,秒过

#include<stdio.h>

int main()
{
  printf("PTA shi3 wo3 jing1 shen2 huan4 fa1 !\n");
  return 0;
}

------------------------------------------------L1-058----------------------------------------------------------

6翻了

 

666.JPG

“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入格式:

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

输入样例:

it is so 666 really 6666 what else can I say 6666666666

输出样例:

it is so 666 really 9 what else can I say 27

------------------------------------------------L1-058----------------------------------------------------------

注解:这道题有点小难度,需要对不同数量的6进行处理,分类处理,需要用getline读取整行,难度也不是特别大,小心一点就好。

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;

char temp[1001];
char ans[1001];
int count6 = 0,count = 0;
void six()
{
    if(count6>3 && count6<=9)
    {
        ans[count] = '9';
        count++;
        count6 = 0;
    }
    else if(count6>9)
    {
        ans[count] = '2';
        ans[count+1] = '7';
        count = count + 2;
        count6 = 0;
    }
    else if(count6>0 && count6<=3)
    {
        for(int u = 0;u<count6;u++)
        {
            ans[count] = '6';
            count++;
        }
        count6 = 0;
    }
}
int main()
{
    cin.getline(temp,1001);
    for(int i = 0;i<strlen(temp);i++)
    {
        if(temp[i] == '6') count6++;
        else
        {
            six();
            ans[count] = temp[i];
            count++;
        }
    }
    six();
    ans[count] = '\0';
    puts(ans);
    return 0;
 } 

------------------------------------------------L1-059----------------------------------------------------------

敲笨钟

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。

现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。

输入格式:

输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。

输出格式:

对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。

输入样例:

5
xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong.
tian sheng wo cai bi you yong, qian jin san jin huan fu lai.
xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long.
zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong.
ren xian gui hua luo, ye jing chun shan kong.

输出样例:

xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong.
Skipped
xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong.
Skipped
Skipped

------------------------------------------------L1-059----------------------------------------------------------

注解:这题我印象记得我当时写的时候是用char一个个判的,所以bug比较多,这次重写用了个string流块存储法,之前有看到有大佬用这种写法来存储每个单词,是一个不错的方法。

难点:对string类的灵活应用,还是推荐对于string使用cin和cout比较保险,不然可能用scanf和printf容易gg

注解:temp_s.find("ong,") != -1,即使用find函数,能够得到查找到的下标,但是如果找不到的话就会返回-1

temp_s.back() == '.',即使用back函数,能够得到string的最后一位是什么,很方便的一个函数,看来得多多练习对string类的使用。

贴上AC代码:

#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#define MAX 99
using namespace std;

int times;
int main()
{
    scanf("%d",&times);
    int count,mark;
    for(int i = 0;i<times;i++)
    {
        string s[MAX];
        count = mark = 0;
        string temp_s;
        while(cin>>temp_s)
        {
            if(temp_s.back() == ',')
                if(temp_s.find("ong,") != -1)
                    mark++;
            if(temp_s.back() == '.')
            {
                if(temp_s.find("ong.") != -1)
                    mark++;
                s[count++] = temp_s;
                break;
            }
            else
                s[count++] = temp_s;
        }
        if(mark == 2)
        {
            for(int u = 0;u<count-3;u++)
                printf("%s ",s[u].c_str());
            printf("qiao ben zhong.\n");    
        }
        else
            printf("Skipped\n");
    }
    return 0;
 } 

 ------------------------------------------------L1-060----------------------------------------------------------

心理阴影面积

xlyy.JPG

这是一幅心理阴影面积图。我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线)。由红、蓝线围出的面积,就是我们在做作业时的心理阴影面积。

现给出红色拐点的坐标 (,要求你算出这个心理阴影面积。

输入格式:

输入在一行中给出 2 个不超过 100 的正整数 x 和 y,并且保证有 x>y。这里假设横、纵坐标的最大值(即截止日和最终完成度)都是 100。

输出格式:

在一行中输出心理阴影面积。

友情提醒:三角形的面积 = 底边长 x 高 / 2;矩形面积 = 底边长 x 高。嫑想得太复杂,这是一道 5 分考减法的题……

输入样例:

90 10

输出样例:

4000

 ------------------------------------------------L1-060----------------------------------------------------------

 注解:神仙水题

#include<stdio.h>
int main()
{
  int x,y,t;
  scanf("%d %d",&x,&y);
  t=5000-(100-x)*y-x*y/2-(100-x)*(100-y)/2;
  printf("%d",t);
  return 0;
}

  ------------------------------------------------L1-061----------------------------------------------------------

新胖子公式

根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。

输入格式:

输入在一行中给出两个正数,依次为一个人的体重(以 kg 为单位)和身高(以 m 为单位),其间以空格分隔。其中体重不超过 1000 kg,身高不超过 3.0 m。

输出格式:

首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后 1 位。如果这个数值大于 25,就在第二行输出 PANG,否则输出 Hai Xing

输入样例 1:

100.1 1.74

输出样例 1:

33.1
PANG

输入样例 2:

65 1.70

输出样例 2:

22.5
Hai Xing

  ------------------------------------------------L1-061----------------------------------------------------------

 注解:难度不大,水题,if判断就好

#include<stdio.h>
int main()
{
    double wight, tall;
    scanf("%lf %lf", &wight, &tall);
    printf("%.1f", wight / (tall * tall));
    printf("\n");
    if ((int)(wight / (tall * tall)) > 25)
        printf("PANG");
    else
        printf("Hai Xing");
    printf("\n");
    return 0;
}

   ------------------------------------------------L1-062----------------------------------------------------------

幸运彩票

彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。

输入格式:

输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。

输出格式:

对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wish you good luck.

输入样例:

2
233008
123456

输出样例:

You are lucky!
Wish you good luck.

------------------------------------------------L1-062----------------------------------------------------------

 注解:这题很搞笑,百度了一下,有两个题解,真的是多此一举。一个题解是把每一位给切出来,还有一个很接近我的答案了,却要去减个‘0’,其实没有必要,直接相加就好了,因为他们全都是基于加了‘0’上的运算,相当于同一起点的,直接加就可以了。

#include<stdio.h>

int times;
int main()
{
    scanf("%d",&times);
    while(times--)
    {
        getchar();
        char temp[6];
        scanf("%s",&temp);
        if((temp[0]+temp[1]+temp[2]) == (temp[3]+temp[4]+temp[5]))
            printf("You are lucky!\n");
        else 
            printf("Wish you good luck.\n");
    }
    return 0;
}

------------------------------------------------L1-063----------------------------------------------------------

吃鱼还是吃肉

fish.JPG肉.JPG

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。

现在你要根据小宝宝的身高体重,给出补充营养的建议。

输入格式:

输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:

性别 身高 体重

其中性别是 1 表示男生,0 表示女生。身高体重都是不超过 200 的正整数。

输出格式:

对于每一位宝宝,在一行中给出你的建议:

  • 如果太矮了,输出:duo chi yu!(多吃鱼);
  • 如果太瘦了,输出:duo chi rou!(多吃肉);
  • 如果正标准,输出:wan mei!(完美);
  • 如果太高了,输出:ni li hai!(你厉害);
  • 如果太胖了,输出:shao chi rou!(少吃肉)。

先评价身高,再评价体重。两句话之间要有 1 个空格。

输入样例:

4
0 130 23
1 129 27
1 130 30
0 128 27

输出样例:

ni li hai! duo chi rou!
duo chi yu! wan mei!
wan mei! shao chi rou!
duo chi yu! shao chi rou!

------------------------------------------------L1-063----------------------------------------------------------

注解:神仙水题,主要是多判断几个东西就好了。

#include<stdio.h>
int main()
{
    int cases;
    scanf("%d", &cases);
    getchar();
    while (cases--)
    {
        int sex, tall, wight;
        scanf("%d %d %d", &sex, &tall, &wight);
        int flag = 0;
        if (sex == 0)
            flag = 1;
        if (tall < 130 - flag)
            printf("duo chi yu! ");
        if (tall == 130 - flag)
            printf("wan mei! ");
        if (tall > 130 - flag)
            printf("ni li hai! ");
        if (wight < 27 - flag * 2)
            printf("duo chi rou!\n");
        if (wight == 27 - flag * 2)
            printf("wan mei!\n");
        if (wight > 27 - flag * 2)
            printf("shao chi rou!\n");
    }
    return 0;
}

注:如果有更好的解法,真心希望您能够评论留言贴上您的代码呢~互相帮助互相鼓励才能成长鸭~ 

猜你喜欢

转载自www.cnblogs.com/winniy/p/10889528.html