PTA基础题练习1

1. 考试座位号

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

输入格式

输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。

输入样例

4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4

输出样例

3310120150912002 2
3310120150912119 1
#include 

typedef  struct Student
{
    char sno[17];
    int test_seat;
    int exam_seat;
};

int main()
{
    int n, m, i, j;
    scanf("%d", &n);
    struct Student stu[n];
    for(i=0; i<n; i++)
    {
        scanf("%s %d %d", stu[i].sno, &stu[i].test_seat, &stu[i].exam_seat);
    }
    scanf("%d", &m);
    int seat[m];
    for(j=0; j<m; j++)
    {
        scanf("%d", &seat[j]);
    }
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            if(seat[i] == stu[j].test_seat)
            {
                printf("%s %d", stu[j].sno, stu[j].exam_seat);
            }
        }
        if(i != m-1)
        	printf("\n");
    }
    return 0;
}

2. 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

输入格式

输入在一行中给出一个整数,如:1234。整数包括负数、零和正数。

输出格式

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si

输入样例

-600

输出样例

fu liu ling ling
def print_char(num):
    dict_num = {'-': 'fu', '0': 'ling', '1': 'yi', '2': 'er',
                '3': 'san', '4': 'si', '5': 'wu', '6': 'liu',
                '7': 'qi', '8': 'ba', '9': 'jiu'}
    for i in range(len(num)):
        if i != len(num) - 1:
            print(dict_num[num[i]], end=' ')
        else:
            print(dict_num[num[i]])


if __name__ == '__main__':
    num = input()
    print_char(num)

3. 求整数段和

给定两个整数AB,输出从AB的所有整数以及这些数的和。

输入格式

输入在一行中给出2个整数AB,其中−100≤AB≤100,其间以空格分隔。

输出格式

首先顺序输出从AB的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例

-3 8

输出样例

-3   -2   -1    0    1
 2    3    4    5    6
 7    8
Sum = 30
#include 

int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    int count = 0;
    int sum = 0;
    for(int i=a; i<=b; i++)
    {
        printf("%5d", i);
        count++;
        sum += i;
        if(count % 5 == 0 || i == b)
            printf("\n");
    }
    printf("Sum = %d", sum);
    return 0;
}

4. 比较大小

将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:

4 2 8

输出样例:

2->4->8
#include 

int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    int min, mid, max;
    min = mid = max = a;
    if (b < min)
        min = b;
    if (c < min)
        min = c;
    if (b > max)
        max = b;
    if (c > max)
        max = c;
    if (b > min && b < max)
        mid = b;
    if (c > min && c < max)
        mid = c;
    printf("%d->%d->%d", min, mid, max);
    return 0;
}

5. A-B

从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串AB

输入格式

输入在2行中先后给出字符串AB。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式

在一行中打印出AB的结果字符串。

输入样例

I love GPLT!  It's a fun game!
aeiou

输出样例

I lv GPLT!  It's  fn gm!
a = input()
b = input()
c = ""
for i in a:
    if i not in b:
        c += i
print(c)

6. 计算指数

对任意给定的不超过 10 的正整数 n,输出 2的n次方。

输入格式

输入在一行中给出一个不超过 10 的正整数 n

输出格式

在一行中按照格式 2^n = 计算结果 输出 2的n次方的值。

输入样例

5

输出样例

2^5 = 32
#include 
#include 

int main()
{
    int n;
    scanf("%d", &n);
    int c = pow(2, n);
    printf("2^%d = %d", n, c);
    return 0;
}

7. 计算阶乘和

对于给定的正整数N,需要你计算 S=1!+2!+3!+…+N!。

输入格式

输入在一行中给出一个不超过10的正整数N

输出格式

在一行中输出S的值。

输入样例

3

输出样例

9
#include 

int fact(int n)
{
    int ans = 1;
    for(int i=2; i<=n; i++)
    {
        ans *= i;
    }
    return ans;
}

int main()
{
    int n;
    scanf("%d", &n);
    int sum = 0;
    for(int i=1; i<=n; i++)
    {
        sum += fact(i);
    }
    printf("%d", sum);
    return 0;
}

8. 奇偶分家

给定N个正整数,请统计奇数和偶数各有多少个?

输入格式

输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。

输出格式

在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。

输入样例

9
88 74 101 26 15 0 34 22 77

输出样例

3 6
#include 

int main()
{
    int n, m;
    int odd = 0, even = 0;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d", &m);
        if(m % 2 == 0)
            even++;
        else
            odd++;
    }
    printf("%d %d", odd, even);
    return 0;
}

9. 后天

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

输入格式

输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。

输出格式

在一行中输出D天的后天是星期几。

输入样例

3

输出样例

5
#include 

int main()
{
    int arr[7] = {1, 2, 3, 4, 5, 6, 7};
    int d;
    scanf("%d", &d);
    printf("%d", arr[(d+1)%7]);
    return 0;
}

10. I Love GPLT

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

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

输入样例

输出样例

I
 
L
o
v
e
 
G
P
L
T

注意:输出的两个空行中各有一个空格。

str = "I Love GPLT"
for i in str:
    print(i)

11. 标准体重

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

输入格式

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

输出格式

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

输入样例

169

输出样例

124.2
#include 

int main()
{
    int h;
    scanf("%d", &h);
    float weight = (h-100) * 0.9 * 2;
    printf("%.1f", weight);
    return 0;
}

12. A除以B

给定两个绝对值不超过100的整数AB,要求你按照“A/B=商”的格式输出结果。

输入格式

输入在第一行给出两个整数AB(−100≤A,B≤100),数字间以空格分隔。

输出格式

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。

输入样例1

-1 2

输出样例1

-1/2=-0.50

输入样例2

1 -3

输出样例2

1/(-3)=-0.33

输入样例3

5 0

输出样例3

5/0=Error
#include 

int main()
{
    int a, b;
    scanf("%d %d",&a, &b);
    if(b == 0)
    {
        printf("%d/%d=Error\n", a, b);
    }else if(b < 0)
    {
        printf("%d/(%d)=%.2f\n", a, b, a * 1.0 / b);
    }else{
        printf("%d/%d=%.2f\n", a, b, a * 1.0 / b);
    }
    return 0;
}

13. 寻找250

输入格式

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例

888 666 123 -233 250 13 250 -222

输出样例

5
nums = [int(i) for i in input().strip().split(' ')]
print(nums.index(250)+1)

14. 日期格式化

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式

输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式

在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例

03-15-2017

输出样例

2017-03-15
date = input().strip().split('-')
year, month, day = date[2], date[0], date[1]
print(f'{year}-{month}-{day}')

15. 装睡

正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。

输入格式

输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。

输出格式

按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。

输入样例

4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71

输出样例

Tom
Zoe
#include 

typedef struct Person
{
    char name[4];  // 名字
    int breath;    // 呼吸频率
    int pulse;     // 脉搏
};

int main()
{
    int n;
    scanf("%d", &n);
    struct Person p[n];
    for(int i=0; i<n; i++)
    {
        scanf("%s %d %d", &p[i].name, &p[i].breath, &p[i].pulse);
    }
    for(int i=0; i<n; i++)
    {
        if((p[i].breath < 15 || p[i].breath > 20) || (p[i].pulse < 50 || p[i].pulse > 70))
        {
            printf("%s\n", p[i].name);
        }
    }
    return 0;
}

16. 打折

去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。

输入格式

输入在一行中给出商品的原价(不超过1万元的正整数)和折扣(为[1, 9]区间内的整数),其间以空格分隔。

输出格式

在一行中输出商品的折扣价,保留小数点后 2 位。

输入样例

988 7

输出样例

691.60
#include 

int main()
{
    int price, discount;
    scanf("%d %d", &price, &discount);
    printf("%.2f", price * discount * 0.1);
    return 0;
}

17. 电子汪

据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。

本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。

输入格式

输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。

输出格式

在一行中输出 A + B 个Wang!

输入样例

2 1

输出样例

Wang!Wang!Wang!
nums = input().strip().split(' ')
a, b = int(nums[0]), int(nums[1])
print('Wang!'*(a+b))

18. 猜数字

一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。

输入格式

输入在第一行给出一个正整数N(≤10000)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。

输出格式

在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。

输入样例

7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62

输出样例

22 Amy
n = int(input())
dict1 = {}
sum = 0
for i in range(n):
    str = input().strip().split(' ')
    name, number = str[0], int(str[1])
    sum += number
    dict1[name] = number
average = int(sum / (2*n))
for name in dict1.keys():
    dict1[name] = abs(average - dict1[name])
# 按值排序
list1 = sorted(dict1.items(), key=lambda x:x[1])
print(f'{average} {list1[0][0]}')

19. 心理阴影面积

PTA基础题练习1_第1张图片

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

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

输入格式

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

输出格式

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

输入样例

90 10

输出样例

4000
#include 

int main()
{
    int x, y;
    int area_total = 5000;
    float triangle1, triangle2;
    float rectangle_area;
    scanf("%d %d", &x, &y);
    // 求两个三角形的面积
    triangle1 = x * y / 2;
    triangle2 = (100-y) * (100-x) / 2;
    // 求小矩形的面积
    rectangle_area = (100-x) * y;
    // 阴影面积=大三角形的面积-两个小三角形的面积-小矩形的面积
    int shadow = 5000 - triangle1 - triangle2 - rectangle_area;
    printf("%d", shadow);
    return 0;
}

20. 新胖子公式

最新的肥胖计算方法为:体重(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
#include 
#include 

int main()
{
    float weight, height, ans;
    while(scanf("%f %f", &weight, &height) != EOF)
    {
        if(weight > 1000 || height > 3.0)
            break;
        ans = weight / pow(height, 2);
        printf("%.1f\n", ans);
        if(ans > 25)
        {
            printf("PANG\n");
        }
        else{
            printf("Hai Xing\n");
        }
    }
    return 0;
}

21. 幸运彩票

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

输入格式

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

输出格式

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

输入样例

2
233008
123456

输出样例

You are lucky!
Wish you good luck.
n = int(input())
for i in range(n):
    num = input().strip()
    num1 = int(num[0]) + int(num[1]) + int(num[2])
    num2 = int(num[3]) + int(num[4]) + int(num[5])
    if num1 == num2:
        print("You are lucky!")
    else:
        print("Wish you good luck.")

22. 求猫的体积

测量一个人的体积是很难的,但猫就不一样了。因为猫是液体,所以可以很容易地通过测量一个长方体容器的容积来得到容器里猫的体积。

输入格式

输入在第一行中给出 3 个不超过 100 的正整数,分别对应容器的长、宽、高。

输出格式

在一行中输出猫的体积。

输入样例

23 15 20

输出样例

6900
#include 

int main()
{
    int length, width, heigth, volume;
    scanf("%d %d %d", &length, &width, &heigth);
    volume = length * width * heigth;
    printf("%d", volume);
    return 0;
}

你可能感兴趣的:(学习笔记,PTA,编程)