首页 > 其他分享 >PTA L1系列题解(C语言)(L1_073 -- L1_080)

PTA L1系列题解(C语言)(L1_073 -- L1_080)

时间:2024-10-16 22:22:20浏览次数:3  
标签:输出 073 int 题解 样例 L1 字符串 输入

L1-073 人与神

题目内容:

L1-073 人与神 - 团体程序设计天梯赛-练习集 (pintia.cn)

跨界大神 L. Peter Deutsch 有一句名言:“To iterate is human, to recurse divine.”(迭代的是人,递归的是神)。本题就请你直接在屏幕上输出这句话。

输入格式:

本题没有输入。

输出格式:

在一行中输出 To iterate is human, to recurse divine.

输入样例:

输出样例:

To iterate is human, to recurse divine.

解题思路:

略。

C代码展示:

#include <stdio.h>

int main()
{
	printf("To iterate is human, to recurse divine.");
	
	return 0;
}

L1-074 两小时学完C语言

题目内容:

L1-074 两小时学完C语言 - 团体程序设计天梯赛-练习集 (pintia.cn)

知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。

假设一本 C 语言教科书有 N 个字,这个宝宝每分钟能看 K 个字,看了 M 分钟。还剩多少字没有看?

输入格式:

输入在一行中给出 3 个正整数,分别是 N(不超过 400 000),教科书的总字数;K(不超过 3 000),是宝宝每分钟能看的字数;M(不超过 120),是宝宝看书的分钟数。

题目保证宝宝看完的字数不超过 N。

输出格式:

在一行中输出宝宝还没有看的字数。

输入样例:

100000 1000 72

输出样例:

28000

解题思路:

略。

C代码展示:

#include <stdio.h>

int main()
{
	int n, k, m;
	scanf("%d %d %d", &n, &k, &m);
	printf("%d", n - k*m);
	
	return 0;
}

L1-075 强迫症

题目内容:

L1-075 强迫症 - 团体程序设计天梯赛-练习集 (pintia.cn)

小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。

输入格式:

输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。

输出格式:

在一行中按标准格式 年年年年-月月 将输入的信息整理输出。

输入样例 1:

9808

输出样例 1:

1998-08

输入样例 2:

0510

输出样例 2:

2005-10

输入样例 3:

196711

输出样例 3:

1967-11

解题思路:

本题整体就是对输入长度和首两位的判断,可以使用整数形式存储,解题会相对容易一些,然后我给的是用字符串输入进行处理的代码。

C代码展示:

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

int main() {
    char s[10];
    scanf("%s", s);
    if (strlen(s) == 6) { // 如果字符串长度为6
        char x = s[4]; // 保存第5个字符
        s[4] = '\0'; // 将第5个字符替换为字符串结束符
        printf("%s-", s); // 打印字符串的第一部分和短横线
        s[4] = x; // 恢复第5个字符
        printf("%s\n", &s[4]); // 打印字符串的第二部分
    } else { // 如果字符串长度不是6
        if (strncmp(s, "22", 2) >= 0) { // 如果字符串的前两个字符大于或等于"22"
            printf("19%c%c-", s[0], s[1]); // 在字符串前添加"19"
            printf("%s\n", &s[2]); // 打印字符串的其余部分
        } else { // 如果字符串的前两个字符小于"22"
            printf("20%c%c-", s[0], s[1]); // 在字符串前添加"20"
            printf("%s\n", &s[2]); // 打印字符串的其余部分
        }
    }
    
    return 0;
}

L1-076 降价提醒机器人

题目内容:

L1-076 降价提醒机器人 - 团体程序设计天梯赛-练习集 (pintia.cn)

小 T 想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小 T 写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。

输入格式:

输入第一行是两个正整数 N 和 M (1≤N≤100,0≤M≤1000),表示有 N 条价格记录,小 T 设置的价格为 M。

接下来 N 行,每行有一个实数 Pi​(−1000.0<Pi​<1000.0),表示一条价格记录。

输出格式:

对每一条比设定价格 M 便宜的价格记录 P,在一行中输出 On Sale! P,其中 P 输出到小数点后 1 位。

输入样例:

4 99
98.0
97.0
100.2
98.9

输出样例:

On Sale! 98.0
On Sale! 97.0
On Sale! 98.9

解题思路:

略。

C代码展示:

#include <stdio.h>

int main()
{
	int n, m, flag = 0;
	scanf("%d %d", &n, &m);
	for (int i=0; i<n; i++){
		float x;
		scanf("%f", &x);
		if (x < m){
			if (flag == 0){
				printf("On Sale! %.1f", x);
				flag = 1;
			}
			else printf("\nOn Sale! %.1f", x);
		}
	}

	return 0;
}

L1-077 大笨钟的心情

题目内容:

L1-077 大笨钟的心情 - 团体程序设计天梯赛-练习集 (pintia.cn)

有网友问:未来还会有更多大笨钟题吗?笨钟回复说:看心情……

本题就请你替大笨钟写一个程序,根据心情自动输出回答。

输入格式:

输入在一行中给出 24 个 [0, 100] 区间内的整数,依次代表大笨钟在一天 24 小时中,每个小时的心情指数。

随后若干行,每行给出一个 [0, 23] 之间的整数,代表网友询问笨钟这个问题的时间点。当出现非法的时间点时,表示输入结束,这个非法输入不要处理。题目保证至少有 1 次询问。

输出格式:

对每一次提问,如果当时笨钟的心情指数大于 50,就在一行中输出 心情指数 Yes,否则输出 心情指数 No

输入样例:

80 75 60 50 20 20 20 20 55 62 66 51 42 33 47 58 67 52 41 20 35 49 50 63
17
7
3
15
-1

输出样例:

52 Yes
20 No
50 No
58 Yes

解题思路:

略。

C代码展示:

#include <stdio.h>

int main()
{
	int s[100], t, flag = 0;
	for (int i=0; i<24; i++){
		scanf("%d", &s[i]);
	}
	while (scanf("%d", &t)){
		if (t < 0 || t > 23) break;
		if (flag == 0) flag = 1;
		else printf("\n");
		printf("%d ", s[t]);
		if (s[t] > 50) printf("Yes");
		else printf("No");
	}
	
	return 0;
}

L1-078 吉老师的回归

题目内容:

L1-078 吉老师的回归 - 团体程序设计天梯赛-练习集 (pintia.cn)

曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦!

为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的字符串描述出来,如:Problem A: Print "Hello world!"

众所周知,吉老师的竞赛水平非常高超,你可以认为他每道题目都会做(事实上也是……)。因此,吉老师会按照顺序看题并做题。但吉老师水平太高了,所以签到题他就懒得做了(浪费时间),具体来说,假如题目的字符串里有 qiandao 或者 easy(区分大小写)的话,吉老师看完题目就会跳过这道题目不做。

现在给定这次天梯赛总共有几道题目以及吉老师已经做完了几道题目,请你告诉大家吉老师现在正在做哪个题,或者吉老师已经把所有他打算做的题目做完了。

提醒:天梯赛有分数升级的规则,如果不做签到题可能导致团队总分不足以升级,一般的选手请千万不要学习吉老师的酷炫行为!

输入格式:

输入第一行是两个正整数 N,M (1≤M≤N≤30),表示本次天梯赛有 N 道题目,吉老师现在做完了 M 道。

接下来 N 行,每行是一个符合题目描述的字符串,表示天梯赛的题目内容。吉老师会按照给出的顺序看题——第一行就是吉老师看的第一道题,第二行就是第二道,以此类推。

输出格式:

在一行中输出吉老师当前正在做的题目对应的题面(即做完了 M 道题目后,吉老师正在做哪个题)。如果吉老师已经把所有他打算做的题目做完了,输出一行 Wo AK le

输入样例 1:

5 1
L1-1 is a qiandao problem.
L1-2 is so...easy.
L1-3 is Easy.
L1-4 is qianDao.
Wow, such L1-5, so easy.

输出样例 1:

L1-4 is qianDao.

输入样例 2:

5 4
L1-1 is a-qiandao problem.
L1-2 is so easy.
L1-3 is Easy.
L1-4 is qianDao.
Wow, such L1-5, so!!easy.

输出样例 2:

Wo AK le

解题思路:

本题的输入输出没有什么难点,然后主要需要处理的问题是在读入的字符串中搜寻有没有指定字符串的出现。

对于这个问题我的处理是使用strstr()函数,这个函数在没有搜索到指定内容时返回NULL,我们只需要判定返回值是否为NULL就可以判定是否存在子串 "easy" 和 "qiandao" 了。

然后再对输入的m值进行自减,记录做的题目。

  1. 读取输入的字符串数量n和可以跳过的字符串数量m。 
  2. 对于每个字符串,检查是否包含特定的子串"easy"或"qiandao"。
  3. 如果不包含这些子串,并且m大于0,则m减1;如果m为0或更小,则输出该字符串。
  4. 使用一个标志变量flag来跟踪是否已经输出过任何字符串。
  5. 如果在处理完所有字符串后flag仍然为0,则输出"Wo AK le"。

C代码展示:

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

int main() {
    int n, m, flag = 0; // 定义变量n(字符串数量),m(可以跳过的字符串数量),flag(用于标记是否输出过字符串)
    scanf("%d %d", &n, &m); // 读取字符串数量和可以跳过的字符串数量
    getchar(); // 读取并丢弃缓冲区中的换行符,为后续的gets函数做准备
    for (int i = 0; i < n; i++) {
        char str[1000]; // 定义字符数组str,用于存储输入的字符串
        gets(str); // 使用gets函数读取一行字符串。
        if (strstr(str, "easy") == NULL && strstr(str, "qiandao") == NULL) { // 如果字符串不包含"easy"或"qiandao"
            if (m > 0) m--; // 如果m大于0,m减1
            else {
                if (flag == 0) { // 如果flag为0,表示还没有输出过字符串
                    flag = 1; // 设置flag为1
                    printf("%s", str); // 输出字符串
                } else {
                    printf("\n%s", str); // 输出换行符和字符串
                }
            }
        }
    }
    if (flag == 0) printf("Wo AK le"); // 如果flag为0,表示没有输出过任何字符串,输出"Wo AK le"
    
    return 0;
}

L1-079 天梯赛的善良

题目内容:

L1-079 天梯赛的善良 - 团体程序设计天梯赛-练习集 (pintia.cn)

天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。

于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。

输入格式:

输入在第一行中给出一个正整数 N(≤2×104),即参赛学生的总数。随后一行给出 N 个不超过 106 的正整数,是参赛学生的能力值。

输出格式:

第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

10
86 75 233 888 666 75 886 888 75 666

输出样例:

75 3
888 2

解题思路:

本题没什么特别的难点,就只需要记录一下最大值和最小值,然后当遇到和最大值、最小值相等的值的时候计数自增。

  1. 读取输入的整数数量n
  2. 使用一个循环读取每个整数。
  3. 对于每个整数,检查它是否大于当前的最大值或小于当前的最小值,并相应地更新最大值和最小值。
  4. 如果整数等于当前的最大值或最小值,则增加最大值或最小值的出现次数。
  5. 循环结束后,输出最小值和最大值,以及它们各自出现的次数。

C代码展示:

#include <stdio.h>

int main() {
    int n, max = 0, min = 10000000, max_cnt = 0, min_cnt = 0; // 定义变量n(整数数量),max(最大值),min(最小值),max_cnt(最大值出现次数),min_cnt(最小值出现次数)
    scanf("%d", &n); // 读取整数数量
    for (int i = 0; i < n; i++) { // 循环读取每个整数
        int x; // 定义变量x,用于存储当前读取的整数
        scanf("%d", &x); // 读取一个整数
        if (x > max) { // 如果当前整数大于最大值
            max = x; // 更新最大值
            max_cnt = 1; // 重置最大值出现次数为1
        } else if (x == max) { // 如果当前整数等于最大值
            max_cnt++; // 增加最大值出现次数
        }
        if (x < min) { // 如果当前整数小于最小值
            min = x; // 更新最小值
            min_cnt = 1; // 重置最小值出现次数为1
        } else if (x == min) { // 如果当前整数等于最小值
            min_cnt++; // 增加最小值出现次数
        }
    }
    printf("%d %d\n%d %d", min, min_cnt, max, max_cnt); // 输出最小值、最小值出现次数、最大值和最大值出现次数
    
    return 0;
}

L1-080 乘法口诀数列

题目内容:

L1-080 乘法口诀数列 - 团体程序设计天梯赛-练习集 (pintia.cn)

本题要求你从任意给定的两个 1 位数字 a1​ 和 a2​ 开始,用乘法口诀生成一个数列 {an​},规则为从 a1​ 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。

输入格式:

输入在一行中给出 3 个整数,依次为 a1​、a2​ 和 n,满足 0≤a1​,a2​≤9,0<n≤103。

输出格式:

在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

2 3 10

输出样例:

2 3 6 1 8 6 8 4 8 4

样例解释:

数列前 2 项为 2 和 3。从 2 开始,因为 2×3=6,所以第 3 项是 6。因为 3×6=18,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6×8=48,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。

解题思路:

这道题的运算思路和 斐波那契数列 的运算差不多,但这题是后一项等于前两项之积,然后对于这道题比较需要注意的就是乘积是两位数时。

然后对于这边,我们需要增加一个乘积与10的比较,>=10就是两位数,这个很好理解。然后从这一点出发,还有一个需要注意的点就是它的运算,它不会说因为存入了两位数,然后运算会向后两次,它还是按照原来的顺序,只向后一位移动。

  1. 读取用户输入的两个数字a1a2,以及数列的长度n
  2. 初始化num数组的前两个元素为a1a2
  3. 使用一个循环计算数列的后续元素,每个元素是前两个元素的乘积。
  4. 如果乘积大于等于10,则将十位和个位分别存储在num数组中。
  5. 使用另一个循环输出整个数列。

C代码展示:

#include <stdio.h>

int main() {
    int a1, a2, n, num[1005], f=0, s=1; // 定义变量a1和a2(数列的前两个数字),n(数列的长度),num数组(存储数列),f和s(用于索引num数组)
    scanf("%d %d %d", &a1, &a2, &n); // 读取数列的前两个数字和长度
    num[0] = a1; // 将a1存储在num数组的第一个位置
    num[1] = a2; // 将a2存储在num数组的第二个位置
    for (int i=2; i<n; i++, f++, s++) { // 从第三个数字开始,直到第n个数字
        int temp = num[f] * num[s]; // 计算当前数字,为前两个数字的乘积
        if (temp >= 10) { // 如果乘积大于等于10
            num[i] = temp / 10; // 将十位存储在num数组的当前位置
            i++; // 增加索引,为个位做准备
        }
        num[i] = temp % 10; // 将个位存储在num数组的下一个位置
    }
    for (int i=0; i<n; i++) { // 遍历num数组,输出数列
        if (i == 0) printf("%d", num[i]);
        else printf(" %d", num[i]); //满足题目要求的输出格式。
    }
    
    return 0;
}

标签:输出,073,int,题解,样例,L1,字符串,输入
From: https://blog.csdn.net/sikimayi/article/details/142873287

相关文章

  • HIAST Collegiate Programming Contest 2024(非完全题解)
    C题HZY做的,等他补题解//#pragmaGCCoptimize("O3,unroll-loops")//#pragmaGCCtarget("avx2,bmi,bmi2,lzcnt,popcnt")////如果在不支持avx2的平台上将avx2换成avx或SSE之一#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecon......
  • HNCPC2024 2024湖南省赛 题解
    目录写在前面I签到C签到E二进制,枚举,子集DPK转化,分层图最短路A枚举,DP,简单计算几何J单调性,枚举,数据结构HDP,字符串,KMPD莫比乌斯反演,枚举写在最后写在前面比赛地址:https://codeforces.com/gym/105423。以下按个人难度向排序。利益相关:现场赛Au。没有和去年一样整场犯唐......
  • [题解]NOIP2018模拟赛 plutotree
    题目描述给定一棵有\(n\)个节点的树,根节点为\(1\),节点\(i\)有权值\(w[i]\)。这棵树非常奇怪,它的每个叶子结点都有一条连向根节点的权值为\(0\)的边。给定\(q\)次询问,每次给定\(u,v\),请计算出一条\(u\)到\(v\)的路径(每条边最多经过\(1\)次),最小化该路径上的点权之和,并在其基础上最......
  • P10353 [PA2024] Grupa permutacji 题解
    神秘!在这些排列生成的置换群\(G\)里,若\(\exists\pi\inG\)使得\(\pi_i=k,\pi_j=l\),则所有这些\((k,l)\)被同样数量的\(\pi\inG\)通过前述方法得出。证明:设\(\pi(i,j)=(k,l),\pi'(i,j)=(k',l')\)(意义前述),则\(\pi^{-1}\circ\pi'(k,l)=(k',l')......
  • [题解]P3952 [NOIP2017 提高组] 时间复杂度
    P3952[NOIP2017提高组]时间复杂度我们把循环的嵌套关系看做树形结构,梳理一下\(3\)种情况:直接跳过当前子树:\(x,y\in\mathbb{N}\),且\(x>y\)。\(x=\tt{"n"},y\in\mathbb{N}\)。不跳过,并在处理完所有子节点后追加\(n\)的时间复杂度:\(x\in\mathbb{N},y=\tt{"n"}\)。......
  • 【题解】[2023 合肥蜀山初中] 旅行(travel)
    题目传送门题目大意有一个\(n\)个点\(m\)条边的有向图组成的城市,每条边可以是骑行边或公共交通边,公共交通边只能走一条,边是从\(u_i\)到\(v_i\)的有向边,需要花费\(time_i\)的时间,求\(1\)到其他点的最短路径。思路分析有一个很巧妙的思路叫分层图,它的思路是因为只能......
  • Excel DLL丢失?Excel DLL文件下载指南及常见问题解决方案
    当您在使用MicrosoftExcel时遇到提示DLL文件丢失或损坏的情况,这可能会影响软件的正常运行。为了帮助您解决这一问题,本文提供了ExcelDLL文件的下载指南,并针对常见问题给出了解决方案。一、ExcelDLL文件下载指南确定缺失的DLL文件:首先,您需要确定是哪个DLL文件丢失或损坏......
  • 数据结构1系列题解前瞻
    A.线段树分裂算法:线段树、(平衡树?)板子题,不多做评价。但是开发空间很大,我的写法在洛谷题解上没找到,导致当时想贺题解没贺成。B.三元上升子序列算法:线段树、树状数组、分块、(CDQ分治?)二维偏序板子,开发空间极大,想怎么写就怎么写。C.STEP算法:线段树、分块线段树维护子区间信......
  • P1941 NOIP2014 提高组 飞扬的小鸟 题解
    P1941NOIP2014提高组飞扬的小鸟分析背包经典演变问题玩得挺花。设\(f[i][j]\)表示到达\((i,j)\)的时候的最小点击次数。题目中对于每一个\(i\)有两种处理:点击与不点击(重点:点击可以叠加)。所以,对于点击,我们可以像完全背包一样转移,而不点击就按照01背包转移。对于管......
  • [NOI2020] 美食家 题解
    属于是将矩阵快速幂的绝大部分技巧用到了极致的一道题。暴力部分首先我们先考虑一个普通DP。定义\(dp_{t,i}\)表示在时间为\(t\)时到达点\(i\)可以得到的愉悦值之和的最大值。显然有\((i,j)\inE\todp_{t+w,j}=\max(dp_{t,i}+c_j)\)。特判一下当前节点有美食节的情......