1012 数字分类
最后一个测试点 “A2中多个数的交错相加”,结果可能为零,需要增加加一个判断
1029 旧键盘
-
if (s2.find(s1[i]) == string::npos && ans.find(toupper(s1[i])) == string::npos) string::npos是一个静态常量,表示size_t的最大值(Maximum value for size_t)。该值表示直到字符串结尾。
-
方法一:只将小写字母转化为大写。 if(s[i]>='a'&&s[i]<='z'){s[i]+='A'-'a';}注意前面有个判断!!!转换成小写,则为 -=
- 方法二:for(int i=0;i<str.length();i++) str[i] = tolower(str[j]);
- 仅仅输出一次,令要查元素的哈希值为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。