首页 > 编程语言 >PAT程序设计题解

PAT程序设计题解

时间:2022-10-07 22:55:45浏览次数:138  
标签:输出 PAT int 题解 printf 样例 格式 程序设计 输入

@

目录

7-1 PY圆面积

编写程序,输入圆的半径,计算圆的面积并输出。

提示:圆的计算公式为area=π×radius2,在这道题中,π取3.14159

输入格式:

输入为一个大于0的浮点数,表示圆的半径。

输出格式:

输出一个浮点数,小数点后输出两位,表示圆的面积。

输入样例:

3.2

输出样例:

32.17

radius = float(input())
pi = 3.14159
area = pi*radius**2
print("%.2f"%area)

7-2 求正弦值 输入角度

求正弦值。pi使用系统定义的pi值。

输入格式:

输入角度,小数

输出格式:

输出正弦值,保留两位小数

输入样例:

在这里给出一组输入。例如:

45

输出样例:

在这里给出相应的输出。例如:

0.71

import math
i = float(input())
result = math.sin((math.pi/180)*i)
print("%.2f"%result)

7-3 PY时间差

10点半到11点45之间,有几小时几分钟呢?

你要写一个程序,读入两个时间,计算它们之间的时间差,输出相差几小时几分钟。

输入格式:

输入两行,分别表示两个时间,均以24小时制表达,每个时间以“小时 分钟”的形式表达,第二个时间一定比第一个时间晚或相同,而且一定在同一天内。

输出格式:

输出表示两个时间之间的时间差的两个数字,第一个数字是时间差中的小时数,第二个数字是时间差中的分钟数。

输入样例:

10 30

11 45

输出样例:

1 15

使用最简单的方式

old = input()
new = input()
old_h,old_s = old.split(" ")[0],old.split(" ")[1]
new_h,new_s = new.split(" ")[0],new.split(" ")[1]
old_h,old_s,new_h,new_s = list(map(lambda x:int(x),[old_h,old_s,new_h,new_s]))
result_h = new_h - old_h
result_s = new_s - old_s
print(result_h,result_s)

利用date

from datetime import datetime

def calc_hours(old: str, new: str)->float:
    old_time = datetime.strptime(old, "%Y-%m-%d %H:%M:%S")
    new = datetime.strptime(new, "%Y-%m-%d %H:%M:%S")
    sec = (new - old_time).seconds
    return round(sec/3600, 3)


old = input().replace(" ", ":")
new = input().replace(" ", ":")
time_1 = f'2020-01-01 {old}:00'
time_2 = f'2020-01-01 {new}:00'
result = calc_hours(time_1, time_2)
if(result>1):
    integer = result%result+1
    decimal = (float(result)-float(integer))*60
print("%d %d"%(integer,decimal))

利用三方库numpy

from datetime import datetime
import numpy as np

def calc_hours(old: str, new: str)->float:
    old_time = datetime.strptime(old, "%Y-%m-%d %H:%M:%S")
    new = datetime.strptime(new, "%Y-%m-%d %H:%M:%S")
    sec = (new - old_time).seconds
    return round(sec/3600, 3)


old = input().replace(" ", ":")
new = input().replace(" ", ":")
time_1 = f'2020-01-01 {old}:00'
time_2 = f'2020-01-01 {new}:00'
result = calc_hours(time_1, time_2)
adecimal,integer=np.modf(result)
print(adecimal,integer)

7-2 计算存款利息

本题目要求计算存款利息,计算公式为interest=money×(1+rate)
year
−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。

输入格式:
输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。

输出格式:
在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。

输入样例:
1000 3 0.025
输出样例:
interest = 76.89

#include <stdio.h>
#include <math.h>

int main()
{
    //本题目要求计算存款利息,计算公式为interest=money*(1+rate)^year-money
    //其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。

    //输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。
    //在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。
    //输入样例1000 3 0.025

    float money;
    float year;
    float rate;
    float interest;
    int result = scanf("%f %f %f", &money, &year, &rate);
    interest = money * powf(1 + rate, year) - money;
    printf("interest = %.2f\n", interest);
    return 0;
}

7-3 字符反序输出,并去ASCII码值之和

从键盘输入3个字符,将它们反向输出,并输出这3个字符ASCII码值之和。

输入格式:

在一行中输入3个字符,每个字符之间用空格分隔。

输出格式:
在一行中逆序输出3个字符,每个字符之间用空格分隔。在另一行中输出3个字符ASCII码值之和。

输入样例:

在这里给出一组输入。例如:

a b c
输出样例:
在这里给出相应的输出。例如:

c b a
294

#include <stdio.h>
#include <string.h>

int get_ascii(char *str)
{
    int num  = 0;
    for (size_t i = 0; i < strlen(str); i++)
    {
        num +=str[i];

    }
    return num;

}
void main()
{
    char str[3];
    scanf("%s %s %s", str,str+1,str+2);
    printf("%c %c %c\n",str[2],str[1],str[0]);
    int result = get_ascii(str);
    printf("%d",result);

}

7-1 计算圆球体积

设圆球的半径为r,计算并输出圆球体积v。输出结果保留2位小数。提示:计算圆球的体积公式为:v=
3
4

πr
3
(π=3.14)

输入格式:

输入第一行给出一个正整数半径r(0< r ≤ 100)。

输出格式:
圆球的体积v保留两位小数。

输入样例:

5
输出样例:
v = 523.33

#include <stdio.h>
#include <math.h>
#define PI 3.14f

int main()
{
    int  r;
    scanf("%d",&r);
    float v = (4/3.0f) * PI * powf(r, 3);
    printf("v = %.2f", v);
    return 0;
}

7-1 大小写字符转换

分数 10
作者 齐心
单位 湖北汽车工业学院
输入一个字符,如果是大写字母,将它转换成小写字母并输出;如果是小写字母,将它转换成大写字母并输出;如果都不是,则输出:error

输入样例:

a
输出样例:
A

输入样例:

B
输出样例:
b

输入样例:

1

输出样例:

error

#include <stdio.h>

int main()
{
    char msg;
    scanf("%c", &msg);
    if ('A' <= msg && msg <= 'Z')
    {
        msg = msg + 32;
        printf("%c", msg);
    }
    else if ('a' <= msg && msg <= 'b')
    {
        msg = msg - 32;
        printf("%c", msg);
    }
    else
    {
        printf("error");
    }

    return 0;
}

7-4 计算工资

分数 10
作者 沈睿
单位 浙江大学
某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

输入格式:
输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。

输出格式:
在一行输出该员工的周薪,精确到小数点后2位。

输入样例1:
5 40
输出样例1:
2000.00
输入样例2:
3 50
输出样例2:
1650.00

#include <stdio.h>
int calculate(int year, int weekHour)
{
    int price;
    float salary;
    if (year >= 5)
    {
        price = 50;
        salary = weekHour > 40 ? (weekHour - 40) * 1.5 * price + 2000 : weekHour * price;
        printf("%.2f\n", salary);
    }
    else
    {
        price = 30;

        salary = weekHour > 40 ? (weekHour - 40) * 1.5 * price + 1200 : weekHour * price;
        printf("%.2f\n", salary);
    }

    return 0;
}

int main()
{
    // 入职年数
    int year;
    // 周工作时间
    int weekHour;
    // 工资
    float salary;
    scanf("%d %d", &year, &weekHour);
    calculate(year, weekHour);
    return 0;
}

7-3 计算符号函数的值

分数 10
作者 C课程组
单位 浙江大学
对于任一整数n,符号函数sign(n)的定义如下:

请编写程序计算该函数对任一输入整数的值。

输入格式:

输入在一行中给出整数n。

输出格式:
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。

输入样例1:
10
输出样例1:
sign(10) = 1
输入样例2:
0
输出样例2:
sign(0) = 0
输入样例3:
-98
输出样例3:
sign(-98) = -1

#include <stdio.h>

int sign(int n)
{
    if (n < 0)
    {
        return -1;
    }
    else if (n == 0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
int main()
{
    int num;
    scanf("%d", &num);
    printf("sign(%d) = %d", num, sign(num));
    return 0;
}

7-1 统计学生成绩

分数 10
作者 陈建海
单位 浙江大学
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。

输入格式:

输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

输入样例:

7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1

#include <stdio.h>

void judge(int score, int *grade)
{
    if (score >= 90)
    {
        grade[0]++;
    }
    else if (score < 90 && score >= 80)
    {
        grade[1]++;
    }
    else if (score < 80 && score >= 70)
    {
        grade[2]++;
    }
    else if (score < 70 && score >= 60)
    {
        grade[3]++;
    }
    else if (score < 60)
    {
        grade[4]++;
    }
}

int main()
{
    // 分数
    int score;
    // 装成绩成绩人数分布,初始化
    int grade[5];
    for (size_t i = 0; i < 5; i++)
    {
        grade[i] = 0;
    }

    // 读取人数
    int times;
    scanf("%d", &times);
    // 循环读取分数
    for (size_t i = 0; i < times; i++)
    {
        scanf("%d", &score);
        judge(score, grade);
    }

    for (size_t i = 0; i < 5; i++)
    {
        if (i == 0)
        {
            printf("%d", grade[i]);
        }
        else
        {
            printf(" %d", grade[i]);
        }
    }

    return 0;
}

7-3 统计素数并求和

分数 10
作者 张彤彧
单位 浙江大学
本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:

在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31
输出样例:
7 143

#include <stdio.h>

int judge(int i, int *sum)
{
    // 判断i是否为素数
    int o = 2;
    for (; o < i; o++)
    {
        // 符合此条件则不为素数
        if (i % o == 0)
        {
            return 0;
        }
    }
    // 如果为素数,则返回1,并累计加和。
    *sum += i;
    return 1;
}

int main()
{
    // 本题要求统计给定整数M和N区间内素数的个数并对它们求和。
    // 输入样例10 31 正整数M和N

    int m, n, flag, i, total, sum;
    total = flag = sum = 0;
    scanf("%d %d", &m, &n);

    // 外循环m到n个数字
    for (i = m; i <= n; i++)
    {
        if (i == 1)
        {
            continue;
        }
        // 如果判断为素数,那么素数总数加一
        if (judge(i, &sum) == 1)
            total++;
    }
    printf("%d %d\n", total, sum);
    return 0;
}

7-1 重要的话说三遍

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

你只需要把这句很重要的话 —— “I'm gonna WIN!”——连续输出三遍就可以了。

注意每遍占一行,除了每行的回车不能有任何多余字符。

#include <stdio.h>

int main()
{
    for (size_t i = 0; i < 3; i++)
    {
        printf("I'm gonna WIN!");
        if (i<2)
        {
            putchar('\n');
        }

    }

    return 0;
}

7-2 输出倒三角图案

本题要求编写程序,输出指定的由“*”组成的倒三角图案。

输入格式:

本题目没有输入。

输出格式:

按照下列格式输出由“*”组成的倒三角图案。

简单实现

#include <stdio.h>

int main()
{
    printf("* * * *\n");
    printf(" * * *\n");
    printf("  * *\n");
    printf("   *");
    return 0;
}

稍微复杂的代码

#include <stdio.h>
int main()
{

    int i, j;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < i; j++)
            putchar(' '); // 前面的空格
        for (j = 4 - j; j > 0; j--)
        {
            putchar('*');
            putchar(' '); // 中间的空格
        }
        if (i != 3)
        {
            putchar('\n');
        }
    }
    return 0;
}

7-3 打印菜单

本题要求编写程序,在屏幕上打印5行菜单。

输入格式:

本题目没有输入。

输出格式:

按照下列格式打印菜单,每行显示一句。注意除了每行的换行不能有任何多余字符。

[1] Select crisps

[2] Select popcorn

[3] Select chocolate

[4] Select cola

[0] Exit

#include <stdio.h>
int main()
{
    char *message = "Select";
    printf("[1] %s crisps\n", message);
    printf("[2] %s popcorn\n", message);
    printf("[3] %s chocolate\n", message);
    printf("[4] %s cola\n", message);
    printf("[0] Exit\n");

    return 0;
}

7-2 介绍一下你自己

本题目要求输入你的姓名、年龄和籍贯,然后输出一个自我介绍的字符串。

输入格式:

输入你的姓名、年龄和籍贯。

输出格式:

对每一组输入,在一行中输出一个自我介绍的字符串。

输入样例:

小明

20

北京

输出样例:

大家好!我是小明,今年20岁,来自北京。

name = input()
age = input()
place = input()
msg = f"大家好!我是{name},今年{age}岁,来自{place}。"
print(msg)

7-3 美化姓名

输入姓名,美化后输出。

输入格式:

输入一个姓名,如“张无忌”、“哪吒”、“Fiona

输出格式:

在姓名的左右各加上一个星号,如“*张无忌*”、“*哪吒*”、“*Fiona*

输入样例:

在这里给出一组输入。例如:

Tom

输出样例:

在这里给出相应的输出。例如:

Tom

msg = input()
print(f"*{msg}*")

7-4 半圆弧的长度

输入圆的半径,求半圆弧的长度(使用math库的pi常量)

输入格式:

输入圆的半径,可以是小数,也可以是整数。

输出格式:

输出结果,要求结果保留2位小数。输出格式为:L=×××

输入样例:

在这里给出一组输入。例如:

2

输出样例:

在这里给出相应的输出。例如:

L=6.28

from math import pi
receive = float(input())*pi
print("L=%.2f"%receive,end='')

7-5 输出工资表

现要求打印一份员工工资,输入员工的姓名、每小时收入、工作时长,税率和养老金比例,计算员工的净收入并输出相应的信息。
员工的工资 = 每小时收入 * 工作时长
税费 = 工资 * 税率
养老金 = 工资 * 养老金比例
净收入 = 工资 - 税费 - 养老金

输入格式:

输入共5行,每一行依次为员工的姓名、工作时长、每小时收入、税率和养老金比例

输出格式:

依次在每一行输出:姓名、工作小时、每小时收入、工资、扣除金额、净收入

输入样例:

在这里给出一组输入。例如:

于敏

8

110

0.1

0.05

输出样例:

在这里给出相应的输出。例如:

Employee Name: 于敏

Hours Worked: 8

Pay Rate: $110

Gross Pay: $880

Deductions: 132.0

Net Pay:748.0

def calculate():

    # 姓名
    name = input()
    # 工作时长
    durable = int(input())
    # 每小时收入
    hourly_revenue = int(input())
    # 税率
    rate = float(input())
    # 养老金比例
    pension_rate = float(input())

    """
    员工的工资 = 每小时收入 * 工作时长
    税费 = 工资 * 税率
    养老金 = 工资 * 养老金比例
    净收入 = 工资 - 税费 - 养老金
    """
    salary = hourly_revenue*durable
    rate_free = salary*rate
    pension = salary*pension_rate
    net_income = salary-rate_free-pension
    out = '''Employee Name: {0}

Hours Worked:  {1}
Pay Rate: ${2}
Gross Pay: ${3}
Deductions: {4}
Net Pay:{5}'''.format(name,durable,hourly_revenue,salary,rate_free+pension,net_income)
    print(out)

if __name__=="__main__":
    calculate()

7-2 逆序的三位数

分数 5
作者 翁恺
单位 浙江大学
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

#include <stdio.h>

int main()
{
    int num, ge, shi, bai;
    scanf("%d", &num);
    bai = (num - num % 100) / 100;
    ge = (num - bai * 100) % 10;
    shi = (num - bai * 100 - ge) / 10;
    num = bai + shi * 10 + ge * 100;
    printf("%d\n", num);
    return 0;
}

7-3 厘米换算英尺英寸

分数 5
作者 翁恺
单位 浙江大学
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

输入格式:

输入在一行中给出1个正整数,单位是厘米。

输出格式:

在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。

输入样例:

170

输出样例:

5 6

#include <stdio.h>
#include <math.h>
int main()
{
    int inch, cm, left, right;
    float foot;
    scanf("%d", &cm);
    foot = cm / 30.48;
    left = floor(foot);
    right = floor((foot - left) * 12);
    printf("%d %d", left, right);
    return 0;
}

7-1 出租车计价

分数 10
作者 沈睿
单位 浙江大学
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:

在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:

2.6 2

输出样例1:

10

输入样例2:

5.1 4

输出样例2:

14

输入样例3:

12.5 9

输出样例3:

34

#include <stdio.h>
#include <math.h>

int main()
{
    float price, distance;
    int result, wait_time, wait_price;
    scanf("%f %d", &distance, &wait_time);
    if (distance <= 3)
    {
        price += 10;
    }
    else if (3 < distance && distance <= 10)
    {
        price = (distance - 3) * 2 + 10;
    }
    else
    {
        price = 24 + (distance - 10) * 3;
    }

    wait_price = wait_time >= 5 ? wait_time / 5 * 2 : 0;
    price += wait_price;

    result = round(price);
    printf("%d\n", result);

    return 0;
}

7-2 计算油费

分数 10
作者 颜晖
单位 浙大城市学院
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:

输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

输出格式:

在一行中输出应付款额,保留小数点后2位。

输入样例:

40 97 m

输出样例:

301.34

#include <stdio.h>
int main()
{
    int oil, oil_variety;
    char server_type;
    float total, count, price;

    scanf("%d %d %c", &oil, &oil_variety, &server_type);

    switch (oil_variety)
    {
    case 97:
        price = 7.93;
        break;
    case 93:
        price = 7.44;
        break;
    default:
        price = 6.95;
        break;
    }

    if (server_type == 'm')
        count = 0.95;
    else
        count = 0.97;

    total = price * oil * count;
    printf("%.2f\n", total);
    return 0;
}

标签:输出,PAT,int,题解,printf,样例,格式,程序设计,输入
From: https://www.cnblogs.com/huanghongzhe/p/16767422.html

相关文章

  • 2022-2023-1学期 20221417魏正一 《计算机基础与程序设计》第6周学习总结
    第六周学习目标·Polya如何解决问题·简单类型与组合类型·复合数据结构·查找与排序算法·算法复杂度·递归·代码安全学习资源·教材·阅读「反作弊」:任何时......
  • 「题解」Codeforces GYM 102268 J Jealous Split(300iq Contest 1 J)
    怎么想到的结论?结论是,如果把看成最小化\(\sum{s_i}^2\),那么一定满足条件。证明是考虑如果相邻两段\(s>t\),如果不满足条件即\(s-t>\max\),说明将\(s\)和\(t\)交界处......
  • 计算机程序设计艺术(第一卷) pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1LFQoy0PjmjEOrcr__cNcVA点击这里获取提取码 ......
  • 计算机程序设计艺术(第二卷) pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1NQf7IuBaPgiG7JHve5iWXA点击这里获取提取码 ......
  • 计算机程序设计艺术(第三卷) pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1Aau82yWKPeFBVHEZOzsD0w点击这里获取提取码 ......
  • 阿里云移动端热修复-Sophix(for Android)-问题解答
    前段时间了解了阿里云的热修复Sophix的基本使用,在使用过程中遇到很多问题,特此记录一下。 1、热修复可以发多个补丁么?答:补丁可以发好多次,但只能发布一个补丁。例如:我已......
  • CF1508C题解
    设题目给定的边为实边,未给出的为虚边容易发现2个性质:1.设所有实边的权值异或和为\(s\),则令一条未给出的边的权值为s,其他为0最优考虑求出虚边构成的连通块,这是个经典问题......
  • [SCOI2005] 骑士精神 题解
    题目描述解法采用IDA*算法。不移动骑士而移动空格。每次限制深度,然后对每个遍历到的点进行一次估价,估价函数的值即为当前状态和终点的差异数。如果估计的加上已经确......
  • P2467 地精部落 题解
    P2467地精部落题解比较恶心的一道线性dp。要求1~N的排列,满足a[i-1]<a[i]>a[i+1]或a[i-1]>a[i]<a[i+1],求这样的排列的个数。既然是线性dp,那么状态一定和长度有关,一维的......
  • 答题比赛难题解析(2)
    1、以下说法中正确的个数是():1)实体-关系图和数据流图也可以描述分析模型2)和设计工作流的对象相比较,分析工作流的对象的特点是仅存在于内存中,不保存到硬盘3)每个用例映......