PTA乙级踩坑合集(不断更新)

1012 数字分类

最后一个测试点 “A2中多个数的交错相加”,结果可能为零,需要增加加一个判断

1029 旧键盘

  1. if (s2.find(s1[i]) == string::npos && ans.find(toupper(s1[i])) == string::npos) string::npos是一个静态常量,表示size_t的最大值(Maximum value for size_t)。该值表示直到字符串结尾。

  2. 方法一:只将小写字母转化为大写。 if(s[i]>='a'&&s[i]<='z'){s[i]+='A'-'a';}注意前面有个判断!!!转换成小写,则为 -=

  3. 方法二:for(int i=0;i<str.length();i++) str[i] = tolower(str[j]);
  4. 仅仅输出一次,令要查元素的哈希值为1,循环直接判断每个元素是否为1。

1048 数字加密

string反转 reverse(a.begin(),a.end());

考虑A比B长的情况,B要补零。(因为是B-A,所以不需要考虑B更长的情况)

1055 集体照

使用vector<node> ans;ans.push_back(nod);的方式存储。

“由高到低排列的人物编号位12345,则排完的输出是42135,可以看出是偶数序列的倒序加上奇数序列。可利用队列的FIFO和栈的FILO来实现:偶数入栈,奇数入队,遍历完一行后,出栈、出队。”

1060 爱丁顿数

“即满足有 E 天骑车超过 E 英里的最大整数 E”,即while中 i<n(不能数组越界) and a[j]>i+1(正整数必定大于0,因此不能为0天,要从第一天(i+1)开始算起)。

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5+10;
int a[maxn];
int n;

int main(){
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n);
    int i = 0;
    int j = n-1;
    while(i<n&&a[j]>i+1){
        i++;
        j--;
    }
    cout<<i<<endl;
return 0;
}

1069 微博转发抽奖

不要看错题,用for循环模拟每一个人。

1072 开学寄语

清空vector 1.使用clear(),清空元素,但不回收空间;2.vector<int>().swap(ans),清除元素并回收内存。

测试点2 :"其中编号为 4 位数字" printf("%04d",id);

1092 最好吃的月饼

sort()排序的本质是快速排序可能改变原数组中相同元素的初始顺序。(21 21 -> 21 21)

1100 校庆

1.vector的查找时间复杂度为O(N);map用平衡二叉树结构存储,时间复杂度为O(logN)。

查找成功为 if( ans.find(str) != ans.end())

2.出生日期直接用string的substr()获取,直接比较两个字符串的大小确定年长。substr有两个参数,所需的子字符串的起始位置(从0开始)、子串的长度。eg: str.substr(6,8)从下标6开始,自创长度为8。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值