PTA 算法设计与分析-实验1 (第一章)

1 整数152的各位数字

本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。

输入格式:

本题无输入。

输出格式:

按照以下格式输出:

152 = 个位数字 + 十位数字*10 + 百位数字*100

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
int main()
{
    int a, b, c;
    a = 152 % 10;
    b = 152 / 10 % 10;
    c = 152 / 100;
    printf("152 = %d + %d*10 + %d*100", a, b, c);
    return 0;
}

2 计算分段函数[3]

本题目要求计算下列分段函数f(x)的值:

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:

10

输出样例1:

f(10.0) = 0.1

输入样例2:

234

输出样例2:

f(234.0) = 234.0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <stdio.h>
int main()
{
    double x;
    double result;
    scanf("%lf\n", &x);
    if (x == 10)
    {
        result = 1 / x;
    }
    else
    {
        result = x;
    }
    printf("f(%.1lf) = %.1lf\n", x, result);//注意小数位数
    return 0;
}

注意

3 整数四则运算

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。

输入样例:

3 2

输出样例:

3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
int main()
{
	int a;
	int b;
	scanf("%d %d",&a,&b);
	printf("%d + %d = %d\n", a, b, a + b);
	printf("%d - %d = %d\n", a, b, a - b);
	printf("%d * %d = %d\n", a, b, a * b);
	printf("%d / %d = %d\n", a, b, a / b);
	return 0;
}

4 求组合数

本题要求编写程序,根据公式Cnm​=m!(n−m)!n!​

算出从n个不同元素中取出m个元素(m≤n)的组合数。

建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double

输入格式:

输入在一行中给出两个正整数m和n(m≤n),以空格分隔。

输出格式:

按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。

输入样例:

2 7

输出样例:

result = 21

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//注意各种类型的限制
double fact(int n)
{
	int i = 1;
	double combin = 1;
	for (i = 1; i <= n; i++)
	{
		combin = combin * i;
	}
	return combin;
}

int main()
{
	int m, n;
	double result;
	scanf("%d %d",&m,&n);
	result = fact(n)/(fact(m)*fact(n-m));
	printf("result = %.0f", result);
	return 0;
}

5 高速公路超速处罚

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:

65 60

输出样例1:

OK

输入样例2:

110 100

输出样例2:

Exceed 10%. Ticket 200

输入样例3:

200 120

输出样例3:

Exceed 67%. License Revoked

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int speed, b, limit;
	scanf("%d %d", &speed, &limit);
    b = 1.1 * limit;//这里利用了b是整数
    float percentage = (speed - limit) * 100.0 / limit;

    if (speed < b)//直接speed和limit*1.1比较会有问题——类型不同
    {
        printf("OK\n");
    }
    else if (speed >= b && speed < 1.5 * limit)
    {
        printf("Exceed %d%%. Ticket 200", (int)(percentage + 0.5));
    }
    else
    {
        printf("Exceed %d%%. License Revoked", (int)(percentage + 0.5));
    }

	return 0;
}

6 求分数序列前N项和

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:

20

输出样例:

32.66

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*
使用了double类型来存储分子、分母和部分和,以确保计算结果的精度
当分子和分母的值较大时,使用int类型可能会导致溢出或精度丢失
*/
int main()
{
	int N, i;
	double temp, num1 = 2, num2 = 1;
	double sum = num1 / num2;
	scanf("%d", &N);

	for (i = 1; i < N; i++)
	{
		temp = num1;
		num1 = num1 + num2;
		num2 = temp;
		sum = sum + num1 / num2;
	}

	printf("%0.2lf\n", sum);
	return 0;
}

7 求最大值及其下标

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6
2 8 10 1 9 10

输出样例:

10 2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int n, i, m_min = 0;//注意变量初始化,避免不必要的错误
	scanf("%d", &n);

	int number[n];

	for (i = 0; i < n; i++)
	{
		scanf("%d", &number[i]);
	}

	int max = number[0];
	for (i = 0; i < n; i++)
	{
		if (number[i] > max)
		{
			max = number[i];
			m_min = i;
		}
	}

	printf("%d %d\n", max, m_min );
	return 0;
}

8 矩阵运算

给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入格式:

输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

输入样例:

4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

输出样例:

35

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int n,i,j;
    scanf("%d", &n);
    int a[n][n];//二维数组
    int sum = 0;

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (i != n - 1 && j != n - 1 && i + j != n - 1)
            {
                sum = sum + a[i][j];
            }
        }
    }
    printf("%d", sum);
    return 0;
}

9 查找书籍

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式:

输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

输出格式:

在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

输入样例:

3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0

输出样例:

25.00, Programming in Delphi
18.50, Programming in VB

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

struct book//定义结构体
{
    char a[31];
    double b;
};

int main()
{
    int i = 0, n, max = 0, min = 0;
    struct book m[10];//结构体数组
    
    scanf("%d", &n);
    getchar();//清除输入缓冲区中的换行符

/*
gets()-按下回车键时,输入的字符串将被存储,并结束输入过程。

fgets() 函数会读取换行符在内的整行输入。使用 fgets() 函数读取字符串后,可能需要手动处理换行符。

gets()自 C11 标准起已被废弃。
*/

    for (i = 0; i < n; i++)
    {
        gets(m[i].a);
        scanf("%lf", &m[i].b);
        getchar();//清除输入缓冲区中的换行符
    }

    double temp;
   
    for (i = 0; i < n; i++)
    {
        if (m[i].b > temp)
        {
            temp = m[i].b;
            max = i;
        }
        
    }
 
    for (i = 0; i < n; i++)
    {
         if (m[i].b < temp)
        {
            temp = m[i].b;
            min = i;
        }

    }

    printf("%.2lf, %s\n", m[max].b, m[max].a);
    printf("%.2lf, %s\n", m[min].b, m[min].a);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值