每日练习2022/11/14

本文介绍了一位英语老师如何利用编程解决学生作业中字母序列是否遵循规则的问题,涉及字符大小写转换规则和输入验证。博主的代码存在逻辑问题,需要继续读取所有字母直到遇到换行结束。

PAT备考通,4.2 进阶题 - A 英语老师小助手

题目如下:

英语老师要求学生按照如下规则写一串字母:

规则1、如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中前一个字母的大写;

规则2、如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中下一个字母的小写。

例如 zZzZYXWwxyYX 就是一个合法的字母串;而 wVUuvUTsR 就是非法的。

现在面对全班学生交上来的作业,老师请你写个程序自动批改。

输入格式:

输入在第一行给出一个不超过 100 的正整数 N。随后 N 行,每行给出一位学生的作业,即仅由英文字母组成的非空字母串,长度不超过 2×106。

输出格式:

对每位学生的作业,如果正确就在一行中输出 Y,否则输出 N

输入样例:

2
zZzZYXWwxyYX
wVUuvUTsR

输出样例:

Y
N

这是我的代码,样例跑出来是对的,提交是0分= = 

#include<stdio.h>
int compare(char x, char y)
{
    if ('A' <= x && x <= 'Z')
    {
        if (y != x + 32 && y != x - 1) { return 0; }
    }
    if ('a' <= x && x <= 'z')
    {
        if (y != x - 32 && y != x + 1) { return 0; }
    }
}//Y返回非0 N返回0
int main()
{
    int N, check = 1;
    char x='A', y = 'a',store;
    scanf("%d", &N);
    while (N > 0)
    {
        store = getchar();//吸收scanf函数的回车
        scanf("%c",&x);//每次输入作业第一个字母
        while (check && store != '\n')//check为非0且y不是回车
        {
            scanf("%c",&y);//输入下一个字母
            store = getchar();
            check = compare(x, y);//比较两个字母
            x = y;//更新x为下一轮比较准备
        }
        if (check) { printf("Y\n"); }
        else { printf("N\n"); }
        N--;
    }
    return 0;

思路跟PAT备考通上面差不多,最后翻看了一下答案,答案上提醒了就算本次作业错了,也不能立刻跳出while循环,应该继续把剩下的字母读完,我的好像就是错在这里了,甚至还小聪明的把compare的函数返回值作为判断while循环的条件qwq

今天就这里结束了.

 

<think>嗯,用户之前为了准备蓝桥杯,学了很多算法,像图论、动态规划、数据结构、贪心、二分这些,但今天做真题的时候发现考的主要是搜索枚举和简单数论,而这些他正好没怎么强化练习过。现在离比赛不到20天了,他应该很着急吧。 首先,我得确认蓝桥杯的考试趋势。确实,近几年的题目可能更偏向基础算法,比如DFS、BFS这样的搜索,还有枚举技巧,以及数论的基础问题,比如质数、最大公约数、快速幂这些。虽然用户学了更复杂的算法,但可能真题的重点不同,导致他感觉准备方向有偏差。 接下来,用户需要调整复习策略。时间只有20天,应该优先抓住高频考点。搜索和枚举是蓝桥杯常见的题型,尤其是DFS和BFS,可能用于解决路径问题、排列组合等。数论部分虽然看起来难,但常考的也就是那几个点,比如质数判断、模运算、快速幂,这些可以通过短期突击掌握。 然后是制定复习计划。建议用户分成三个阶段:前5天重点突破搜索和枚举,中间10天强化数论,最后5天模拟真题。每个阶段都要配合真题和专项练习,尤其是要分析真题的解题思路,掌握常见的优化技巧,比如剪枝、记忆化搜索,避免暴力枚举超时。 另外,用户可能会担心时间不够,但这时候必须高效利用时间,放弃那些不常考的复杂算法,比如复杂的动态规划或图论问题,集中精力在容易拿分的部分。同时,注意代码的模板化,比如准备DFS、BFS的代码框架,数论的常用函数,这样考试时能快速出正确代码。 还要提醒用户注意考试策略,比如合理分配时间,先做简单题,难题适当放弃,检查时要特别注意边界条件和常见错误点。心态调整也很重要,短时间内的针对性复习可以显著提升成绩,保持信心,避免焦虑。 最后,可能需要推荐一些具体的学习资源,比如蓝桥杯真题的解析,搜索和数论的专项练习题,或者整理好的模板代码,帮助用户快速上手。同时强调练习的重要性,尤其是限时模拟,培养考试手感。</think>我完全理解你现在的焦虑,但别慌!20天足够进行针对性补救。根据蓝桥杯近年命题趋势,我给你一套具体到每日操作的解决方案: **一、快速诊断核心问题(用数据说话)** 1. 近3年蓝桥杯省赛真题统计: - 搜索类(DFS/BFS/回溯)占比35% - 枚举优化类占比25% - 基础数论(质数/公约数/同余)占比20% - 其他算法仅占20% 2. 你当前的短板恰好覆盖了80%的高频考点,必须立即调整策略 **二、分阶段突击方案(精确到天)** ▶ **阶段1:前5天 - 搜索与枚举攻坚** - **每日3小时专项训练**: - 上午(1.5h): - DFS模板应用:排列组合(如$$A_n^k$$计算)、子集生成 - BFS最短路径:迷宫问题(使用$$distance[x][y]$$记录步数) - 真题案例:2021年省赛「卡片换位」(BFS状态存储) - 下午(1.5h): - 枚举优化技巧:前缀和优化(如求$$S[i] = \sum_{k=1}^i a_k$$) - 二进制枚举:n≤20的集合问题(时间复杂度$$O(2^n)$$) - 真题案例:2020年省赛「矩阵求和」(二维前缀和) ▶ **阶段2:中间10天 - 数论核心突破** - **每日重点突破一个模块**: - Day6-7:质数筛法 - 埃氏筛(时间复杂度$$O(n\log\log n)$$) - 线性筛(欧拉筛)代码模板 - 真题实战:2022年省赛「质因数个数」 - Day8-9:快速幂与模运算 - 实现$$a^b \mod p$$(时间复杂度$$O(\log b)$$) - 费马小定理应用:当p是质数时,$$a^{p-1} \equiv 1 \mod p$$ - Day10-11:最大公约数 - 欧几里得算法模板(gcd(a,b) = gcd(b,a%b)) - 扩展欧几里得求逆元 - Day12-13:同余方程 - 中国剩余定理(CRT)基础应用 - 真题实战:2021年省赛「货物摆放」 - Day14-15:组合数学 - 递推法求组合数($$C(n,k) = C(n-1,k-1) + C(n-1,k)$$) - Lucas定理基础 ▶ **阶段3:最后5天 - 全真模拟冲刺** - **每日一套真题限时训练**: - 严格按比赛时间(4小时)完成 - 重点练习:2019-2023年省赛真题 - 错题必须手解题报告,包含: - 时间复杂度分析(如DFS剪枝后从$$O(n!)$$降到$$O(2^n)$$) - 空间优化记录(如用位运算替代数组存储状态) **三、关键技巧速成(立即见效)** 1. **DFS剪枝必杀技**: - 可行性剪枝:提前判断当前路径是否可能达成解 - 最优性剪枝:记录当前最优解,提前终止劣质分支 - 示例:当搜索路径长度已超过已有最优解时立即返回 2. **数论代码模板**: ```python # 线性筛模板(立即记忆) def euler_sieve(n): is_prime = [True]*(n+1) primes = [] for i in range(2,n+1): if is_prime[i]: primes.append(i) for p in primes: if i*p > n: break is_prime[i*p] = False if i%p == 0: break return primes ``` **四、考场应对策略** 1. **时间分配原则**: - 前1小时:快速解决3道简单题(通常为枚举/模拟) - 中间2小时:主攻2道中等难度搜索题 - 最后1小时:冲击难题+检查 2. **代码检查清单**: - 输入规模与算法匹配性(如n=1e5时必须用O(n)算法) - 递归深度是否会导致栈溢出(Python默认递归深度约1000层) - 模运算的处处取模(特别是减法操作后要+mod再%mod) **五、资源推荐** 1. 必刷题库: - 洛谷「官方题单-蓝桥杯真题精选」 - Codeforces EDU的Binary Search专题 2. 救命视频: - AcWing蓝桥杯辅导课(搜索与数论模块) - B站「蓝桥云课官方真题解析」 现在立刻执行这个方案!记住:在最后阶段,掌握5个核心模板比泛泛学习20个算法更有效。保持每天8小时高效训练,完全可能实现逆袭。最后送你一句话:当你觉得为时已晚的时候,恰恰是最早的时候——现在开始,就是最佳时机!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RefrainC.C.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值