zoukankan      html  css  js  c++  java
  • 『ACM C++』 PTA 天梯赛练习集L1 | 029-033

      哈哈,今天开始我也是学车人了~ 开始一千多道疯狂刷题~

    ------------------------------------------------L1-029----------------------------------------------------------

    是不是太胖了

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

    输入格式:

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

    输出格式:

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

    输入样例:

    169

    输出样例:

    124.2

    ------------------------------------------------L1-029----------------------------------------------------------

    注解:水题。

    #include<stdio.h>
    
    int main()
    {
        int temp;
        scanf("%d",&temp);
        printf("%.1f",(temp - 100)*0.9*2);
        return 0;
    }

    ------------------------------------------------L1-030----------------------------------------------------------

    一帮一

    “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

    输入格式:

    输入第一行给出正偶数N≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

    输出格式:

    每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

    输入样例:

    8
    0 Amy
    1 Tom
    1 Bill
    0 Cindy
    0 Maya
    1 John
    1 Jack
    0 Linda

    输出样例:

    Amy Jack
    Tom Linda
    Bill Maya
    Cindy John

    ------------------------------------------------L1-030----------------------------------------------------------

    注解:思路清晰,按名词保存就好,难点在于你需要从上到下展示。

    · 代码分块:

      第一步,获取排名,按性别分别存储。

    for(int i = 0;i<times;i++)
        {
            int temp;
            scanf("%d %s",&temp,Temp);
            if(temp == 1) 
            {
                counter[i] = 1;
                strcpy(Boy[boy],Temp);
                boy++;
            }
            else
            {
                counter[i] = 0;
                strcpy(Girl[girl],Temp);
                girl++;
            }
    }

      第二步,输出渲染。

        for(int i = 0;i<times/2;i++)
        {
            if(counter[i] == 0)
            {
                for(int u = 0;u<strlen(Girl[t_girl]);u++) printf("%c",Girl[t_girl][u]);
                t_girl++;
                printf(" ");
                for(int u = 0;u<strlen(Boy[boy-1]);u++) printf("%c",Boy[boy-1][u]);
                boy--;
                printf("
    ");
            }
            else
            {
                for(int u = 0;u<strlen(Boy[t_boy]);u++) printf("%c",Boy[t_boy][u]);
                t_boy++;
                printf(" ");
                for(int u = 0;u<strlen(Girl[girl-1]);u++) printf("%c",Girl[girl-1][u]);
                girl--;
                printf("
    ");
            }
        }

    · AC代码:

    #include<stdio.h>
    #include<string.h>
    int times;
    int boy,girl;
    char Temp[99];
    char Boy[50][99];
    char Girl[50][99];
    int counter[51];
    int t_boy,t_girl;
    int main()
    {
        boy = girl = 0;
        scanf("%d",&times);
        for(int i = 0;i<times;i++)
        {
            int temp;
            scanf("%d %s",&temp,Temp);
            if(temp == 1) 
            {
                counter[i] = 1;
                strcpy(Boy[boy],Temp);
                boy++;
            }
            else
            {
                counter[i] = 0;
                strcpy(Girl[girl],Temp);
                girl++;
            }
        }
        for(int i = 0;i<times/2;i++)
        {
            if(counter[i] == 0)
            {
                for(int u = 0;u<strlen(Girl[t_girl]);u++) printf("%c",Girl[t_girl][u]);
                t_girl++;
                printf(" ");
                for(int u = 0;u<strlen(Boy[boy-1]);u++) printf("%c",Boy[boy-1][u]);
                boy--;
                printf("
    ");
            }
            else
            {
                for(int u = 0;u<strlen(Boy[t_boy]);u++) printf("%c",Boy[t_boy][u]);
                t_boy++;
                printf(" ");
                for(int u = 0;u<strlen(Girl[girl-1]);u++) printf("%c",Girl[girl-1][u]);
                girl--;
                printf("
    ");
            }
        }
        return 0;
    }

    ------------------------------------------------L1-031----------------------------------------------------------

    到底是不是太胖了

    据说一个人的标准体重应该是其身高(单位:厘米)减去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!

    输入样例:

    3
    169 136
    150 81
    178 155

    输出样例:

    You are wan mei!
    You are tai shou le!
    You are tai pang le!

    ------------------------------------------------L1-031----------------------------------------------------------

    注解:水题,注意下精度就好。

    #include<stdio.h>
    #include<math.h>
    int times;
    int main()
    {
        scanf("%d",&times);
        while(times--)
        {
            int tall,heavy;
            scanf("%d %d",&tall,&heavy);
            float temp = (tall - 100)*0.9*2;
            if(fabs(temp - heavy) < 0.1*temp) printf("You are wan mei!
    ");
            else
            {
                if(temp > heavy) printf("You are tai shou le!
    ");
                else printf("You are tai pang le!
    ");
            }
        }
        return 0;
    }

    ------------------------------------------------L1-032----------------------------------------------------------

    Left-pad

    根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用*去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

    输入格式:

    输入在第一行给出一个正整数N104​​)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

    输出格式:

    在一行中输出结果字符串。

    输入样例1:

    15 _
    I love GPLT

    输出样例1:

    ____I love GPLT

    输入样例2:

    4 *
    this is a sample for cut

    输出样例2:

     cut

    ------------------------------------------------L1-032----------------------------------------------------------

    注解:水题。

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    int times;
    char B;
    char Temp[999999];
    int main()
    {
        scanf("%d %c ",&times,&B);
        cin.getline(Temp,999998);
        int len = strlen(Temp);
        if(times<=len)
        {
            for(int i = len-times;i<len;i++) printf("%c",Temp[i]);
            printf("
    ");
        }
        else
        {
            for(int i = times-len;i>0;i--) printf("%c",B);
            puts(Temp);
        }
        return 0;
    }

    ------------------------------------------------L1-033----------------------------------------------------------

    出生年

    以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

    输入格式:

    输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

    输出格式:

    根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

    输入样例1:

    1988 4

    输出样例1:

    25 2013

    输入样例2:

    1 2

    输出样例2:

    0 0001

    ------------------------------------------------L1-033----------------------------------------------------------

    注解:这道题还是有坑点的,就是如果你输入1,你得知道前面有3个零。利用位数分割存入char数组去识别就好了,问题不大,注意各个条件的初始化。

    #include<stdio.h>
    #include<string.h>
    
    int Tyear,diff,k,cout,diff_c,step,ans;
    int year[4];
    int num[10];
    void divided(int numm)
    {
        int Tyear = numm;
        memset(num,0,sizeof(num));
        year[0] = year[1] = year[2] = year[3] = 0;
        cout = 3;
        diff_c = 0;
        while(Tyear>0)
        {
            k = Tyear % 10;
            year[cout] = k;
            cout--;
            Tyear = Tyear / 10;
        }
        for(int i = 0;i<4;i++)
        {
            if(num[year[i]] == 0)
            {
                diff_c++;
                num[year[i]] = 1;
            }
        }
    }
    int main()
    {
        scanf("%d %d",&Tyear,&diff);
        ans = Tyear;
        divided(Tyear);
        while(diff_c != diff)
        {
            ans++;
            divided(ans);
            step++;
        }
        printf("%d %04d",step,ans);
        return 0;
     } 

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

  • 相关阅读:
    【今日CV 视觉论文速览】 19 Nov 2018
    【numpy求和】numpy.sum()求和
    【今日CV 视觉论文速览】16 Nov 2018
    【今日CV 视觉论文速览】15 Nov 2018
    poj 2454 Jersey Politics 随机化
    poj 3318 Matrix Multiplication 随机化算法
    hdu 3400 Line belt 三分法
    poj 3301 Texas Trip 三分法
    poj 2976 Dropping tests 0/1分数规划
    poj 3440 Coin Toss 概率问题
  • 原文地址:https://www.cnblogs.com/winniy/p/10534311.html
Copyright © 2011-2022 走看看