第五次CCF-CSP认证(含C++源码)

打印 上一主题 下一主题

主题 993|帖子 993|积分 2979

第一道(easy)


题目链接
思路及AC代码

基本思路:
比如随便给一个数列:1 2 3 4 4 6 6 6
很明显输出的是5 我们在数有几段的时间有两种环境我们会加1
1.前面没有数字的时间,也就是第一段
2.前面数字和背面数字不一样的时间
如果我们用一次遍历就能输出精确答案,我们就需要做到以上两点,第二点很好搞,我们怎么处理第一段,如果我们不管他 在某些环境之下就会少输出一段,我觉得那干脆就一开始就默认有一段不就好了吗,具体到代码中就是让我们的count初始化为1,然后从数组第二位开始遍历就好了,这样就不用搞什么乱七八糟的东西,本身就是一道很简朴的题目不是吗

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N =1010;
  4. int n;
  5. int s[N];
  6. int main()
  7. {
  8.     cin>>n;
  9.     for(int i=0;i<n;i++)
  10.     {
  11.         cin>>s[i];
  12.     }
  13.     int count=1;
  14.     for(int j=1;j<n;j++)
  15.     {
  16.         if(s[j]!=s[j-1])
  17.         {
  18.             count++;
  19.         }
  20.     }
  21.     cout<<count<<endl;
  22. }
复制代码
第二道(easy)


题目链接
思路及AC代码

有了昨天的帖子铺垫,这道是不是有些过于轻松写意了O(∩_∩)O哈哈~
这个帖子的第三题 如果忘了可以温一温
我觉得区别就是昨天那题需要我们通过getdate函数枚举出具体日期,岂论是控制输入输出以及细节处理要求都比力高一些,这题是直接给你个年纪天数,问你某年的第x天是几月几号,这样我们就暴力一下就可以,直到刚刚好枚举到第x天为止
solution 1

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int is_leapyear(int year)
  4. {
  5.     if(year%4==0 && year%100 ||year%400==0)
  6.     {
  7.         return 1;
  8.     }else{
  9.         return 0;
  10.     }
  11. }
  12. // 获取每个月的天数
  13. int daysInMonth(int year, int month) {
  14.     int days[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  15.     if (month == 2 ) {
  16.         return days[2]+is_leapyear(year);
  17.     }
  18.     return days[month];
  19. }
  20. int main()
  21. {
  22.     int year,days;
  23.     cin>>year>>days;
  24.     for(int i=1;i<=12;i++)
  25.     {
  26.         for(int j=1;j<=daysInMonth(year,i);j++)
  27.         {
  28.             if(--days ==0)
  29.             {
  30.                 printf("%d\n%d\n",i,j);
  31.                 return 0;
  32.             }
  33.             
  34.         }
  35.     }
  36.     return 0;
  37. }
  38.                      
复制代码
solution 2

我在题解里看到了比力简洁的代码粘过来了,实在思路是一样的 只不外更直接了
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  4. int main()
  5. {
  6.     int y,d;
  7.     cin>>y>>d;
  8.     if(y%4==0&&y%100!=0||y%400==0)a[2]=29;else a[2]=28;
  9.     int x=0;
  10.     while(d>0){
  11.         if(d-a[x]<=0)break;
  12.         else{
  13.             d-=a[x];
  14.             x++;
  15.         }
  16.     }
  17.     cout<<x<<'\n'<<d;
  18. }
  19. 作者:垫底抽風
  20. 链接:https://www.acwing.com/solution/content/132282/
复制代码
第三道(mid)


题目链接
思路及AC代码(mid)

这题 题干看着挺吓人 我用AI解读了一下题目 我一开始本身做也读了半天才看懂是要干什么


我本身没有全部弄明白 在这里给出参考代码 跟Y总课上的代码是一样的 思路参考:yxc

  1. #include <iostream>
  2. #include <cstring>
  3. #include <unordered_map>
  4. #include <vector>
  5. using namespace std;
  6. int n, m;
  7. unordered_map<string, string> vars;
  8. vector<string> strs;
  9. int main()
  10. {
  11.     cin >> n >> m;
  12.     getchar(); //过滤cin读剩下的回车
  13.     while(n -- )
  14.     {
  15.         string str;
  16.         getline(cin, str);
  17.         strs.push_back(str);
  18.     }
  19.     while(m -- )
  20.     {
  21.         string key, value;
  22.         cin >> key; //变量名不含空格,可以直接cin读
  23.         char c; //变量值含空格和双引号,用getchar()读
  24.         while(c = getchar(), c != '"'); //过滤第一个引号之前的内容
  25.         while(c = getchar(), c != '"') value += c;
  26.         vars[key] = value; //存入哈希表
  27.     }
  28.     for(auto &str : strs) //遍历vetor中的每一行
  29.     {
  30.         for(int i = 0; i < str.size();)
  31.             if(i + 1 < str.size() && str[i] == '{' && str[i + 1] == '{') //如果需要替换变量
  32.             {
  33.                 int j = i + 3;
  34.                 string key;
  35.                 while(str[j] != ' ' || str[j + 1] != '}' || str[j + 2] != '}') //没有到结尾的话
  36.                     key += str[j ++ ]; //读取模板中的变量
  37.                 cout << vars[key]; //哈希表替换模板中的值
  38.                 i = j + 3; //处理完之后要跳过空格和两个右括号
  39.             }
  40.             else cout << str[i ++ ]; //不需要替换变量,直接输出模板原内容
  41.         cout << endl;
  42.     }
  43.     return 0;
  44. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表