给你多个字符串,字符串为0表示所有的字符串都已读完,并且0不被认为是一个非复读字符串。如果后面的字符串与前面的字符串相同,则被当做是复读字符串,首次出现的字符串是非复读字符串。要求将所有的非复读字符串按照行号从小到大连接的结果输出。
1.首先,是多个字符串因此需要动态的去进行记录
2.然后需要记录字符串的状态,将后面与前面相同的进行标记区分
3.最后将状态未改变的也就是非复读字符串进行输出
无
- #include
- using namespace std;
- vector
v; - int main()
- {
- string s;//读入的多个字符,所以用字符串定义
- while(cin>>s)//当读入 字符串时
- {
- if(s=="0")//如果说字符串等于 0,则停止读入字符串
- {
- break;
- }
- int f=1;//定义状态为 1
- for(auto i:v)//用 i 遍历动态数组 v
- {
- if(i==s)//如果遍历的 i 跟字符串相同
- {
- f=0;//那么改变状态
- break;//并停止
- }
- }
- if(f!=0)//如果字符串对应的状态不等于 0 的话则输出对应的字符串
- {
- cout<
- v.push_back(s);//并把字符串放入 vector数组中
- }
- }
- return 0;
- }
总结
难度稍易,注意遍历vector需使用auto。
B - T292112 [传智杯 #5 练习赛] 时钟
知识点:模拟
题意
给你有一个分钟数,问从出有从零至所给分钟数好时刻出现了多少次。
而好时刻是指从零到所给分钟数,而这些数依次组成了一个等差数列。
思路
1. 将所给的分钟数转化成多少天余多少个小时
2. 将时间制的四个位置的对应的数算出来
3. 从零到所给分钟数进行遍历分情况(小时数大于等于10和小时数小于10)判断是否是好时刻进行记录
坑点
1.分钟数判断需分情况分为大于等于10个小时和小于10的小时的情况进行判断
代码
- #include
- using namespace std;
- int n,days,ans=0;//分钟数,天数,好时刻数
- int main()
- {
- cin>>n;//读入分钟数
- days=n/1440;//一天共有1440分钟,用总的分钟数除以1440也就是有几天
- n%=1440;//n%1440求出余下的分钟数
- ans=days*39;//ans表示好时刻数,即用天数乘以39,一天共有39个好时刻
- for(int h=0;h<24;h++)//遍历一天的小时数
- {
- for(int m=0;m<60;m++)//再遍历一天的分钟数
- {
- int a,b,c,d;
- a=h/10;//a表示十位上的时间 ,即几十小时
- b=h%10;//b表示个位上的时间 ,即几小时
- c=m/10;//c表示十位上的分钟数,即几十分钟
- d=m%10;//d表示个位上的分钟数,即几分钟
- if(h>=10&&b-a==c-b&&c-b==d-c)//如果大于等于10小时,当b-a==c-b并且c-b==d-c时则表示等差是好时刻
- {
- ans++;
- }
- if(h<=9&&c-b==d-c)//如果小于10小时并且,那么a等于0,当c-b==d-c构成等差则属于好时刻
- {
- ans++;//好时刻++
-
- }
- n--;//遍历时间
- if(n<0)//时间遍历完了
- {
- break;//则停止
- }
- }
- }
- cout<
//输出好时刻数 - return 0;
- }
总结
难度简单,各个位置的值需耐心分析,并小时数分情况进行分析。
C - T292113 [传智杯 #5 练习赛] 平等的交易
知识点:贪心
题意
给你n个道具,并给出对应每个道具的价格,最后给出现在拥有的钱。
你可用钱购买其中的一件道具,也可拿手中的道具换取其他的道具,但是其他的道具的价值之和不能超过打算交换出去的道具。可交换多次道具,交换到的道具的价值可能为0.
问最多可换取到多少件道具
思路
1.首先排序
2. 用钱买最贵的那一个
3.用最贵的一个去尽可能换价值低的,能拿就拿。
4.进行计数
D - T292114 [传智杯 #5 练习赛] 清洁工
知识点:模拟
E - T292115 [传智杯 #5 练习赛] 树的变迁
知识点:数据结构(树和并查集)
F - T293037 [传智杯 #5 练习赛] 白色旅人
知识点:动态规划