• 通师高专科技创新社训练赛(20221130)


    A-[NOIP2018]标题统计

    题目链接

    题意

    输入一行数,统计其中共有多少个字符,用一个整数表示字符数(不包括空格和换行符)

    思路

    总长度减去空格和换行的字符数

    坑点

    空格容易忘记减去

    实现步骤

    1.先用for循环统计该标题的总长度;
    2.如果有空格和换行,,则需要除去其占用的字符;
    3.最后用自增的方式求出字符的数量。

    代码

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. string s;//生成一个字符串s
    7. int sum=0;
    8. getline(cin,s);//读取字符串
    9. for(int i=0;ilength();i++)//用循环表示s的长度
    10. {
    11. if(s[i]!=' '&&s[i]!='\n')//排除空格和换行
    12. {
    13. sum++;//累加
    14. }
    15. }
    16. cout<
    17. return 0;
    18. }

    总结

    注意题中括号中的内容。

    B - 数字统计

    题目链接

    题意

     统计给定范围[L, R]中,数字2出现的次数

    思路

    分个位,十位,百位...,当等于2时累加

    坑点

    1.要给i赋值,防止被修改

    算法

    1.定义三个变量L,R,sum
    2.给sum赋值0
    3.%10抹除个位
    4.当i等于2时,sum累加
    5.输出sum

    实现步骤

    1.先用for循环,再用while循环
    2.用%10分离每一位,看看是否是2
    3.等于2时累加

    代码

    1. #include
    2. #include
    3. using namespace std;
    4. int main( )
    5. {
    6. int L,R,sum=0;
    7. cin>>L>>R;
    8. int c=L;
    9. int a[10005];
    10. for(int i=L;i<=R;i++)
    11. {
    12. a[i]=i;
    13. int c=i;//防止i被修改
    14. while(c!=0)
    15. {
    16. if(c%10==2)//c取余等于2时,累加
    17. {
    18. sum++;
    19. }
    20. c/=10;//相当于c=c/10,抹除个位
    21. }
    22. }
    23. cout<//输出2的个数
    24. return 0;
    25. }

    总结

     关于for循环while循环的使用,用到取余和复合赋值运算符.

     C - 字符串分类

    题目链接

    题意

    统计n个字符串中有几种本质上不同的字符串

    思路

    用for循环输入,判断两个字符串是否一样

    坑点

    ab!=ba

    实现步骤

    1.输出n个字符串;
    2.用两层for循环进行字符串之间的比较,判断其是否一样;
    3.字符串一样用break阻止;
    4.如果字符串不一样,则进行累加。

    代码

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main()
    6. {
    7. int n,k=1;
    8. cin>>n;
    9. string s[n];
    10. for(int i=0;i
    11. {
    12. cin>>s[i];//输入一组字符串s[i]
    13. }
    14. for(int i=0;i-1;i++)
    15. {
    16. int f=1;
    17. for(int j=i+1;j
    18. {
    19. if(s[i]==s[j])
    20. {
    21. f=0;
    22. break;//字符串相同,则停止输出
    23. }
    24. }
    25. if(f==1)
    26. {
    27. k++;//字符串不同进行累加
    28. }
    29. }
    30. cout<
    31. return 0;
    32. }

    总结

    先用双重循环打印出字符串,再对字符串中的 字符进行比较判断。

    D - 李在赣神魔

    题目链接

    题意

    输入一个n×n的字符矩阵,将其顺时针旋转90度后输出。

    思路

    1.用二维数组输入一个n×n的字符矩阵
    2.按顺时针旋转九十度之后呈现一个倒序

    坑点

     1.顺时针旋转九十度

    算法

     1.定义一个变量n,
     2.定义一个字符型的二维数组
     3.改变for循环内容输出答案

    实现步骤

     1.先输入一个二维数组
     2.用for循环

    代码 

    1. #include
    2. using namespace std;
    3. int main( )
    4. {
    5. int n,i,j;
    6. cin>>n;
    7. char a[1005][1005];
    8. for(i=1;i<=n;i++)//用二维数组输入一个n×n的字符矩阵
    9. {
    10. for(j=1;j<=n;j++)
    11. {
    12. cin>>a[i][j];
    13. }
    14. }
    15. for(i=1;i<=n;i++)
    16. {
    17. for(j=n;j>=1;j--)//顺时针旋转之后呈现一个倒序
    18. {
    19. cout<//旋转之前的i和旋转之后的j相等
    20. }
    21. cout<
    22. }
    23. return 0;
    24. }

    总结

    考察二维数组的运用  注意打草稿

    E - 火车上的2连座 

    题目链接

    题意

    A,B两人选择两个二连坐坐下

    思路

    1.A,B两人一起坐火车,从第一排开始,依次向后判断,如果有两个连座就坐下;
    2.如果过道两边都可以座,优先选择左边;
    3.有输出YES,没有输出NO。

    坑点

    必须是过道一侧的两个连座

    实现步骤

    1.用while输出n排座;
    2.用两层for循环对每个座位是否空着进行判断;

    代码

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main()
    6. {
    7. int n;
    8. while(cin>>n)
    9. {
    10. string a[10000];//输出一组数
    11. int flag=0;
    12. for(int i=0;i
    13. {
    14. cin>>a[i];
    15. }
    16. for(int i=0;i
    17. {
    18. if(a[i][0]=='O'&&a[i][1]=='O')
    19. {
    20. a[i][0]='+';
    21. a[i][1]='+';
    22. flag=1;
    23. break;
    24. }
    25. else if(a[i][3]=='O'&&a[i][4]=='O')
    26. {
    27. a[i][3]='+';
    28. a[i][4]='+';
    29. flag=1;
    30. break;//从第一个座位开始判断两个连续的座位是否可以座,如果有座就停止循环
    31. }
    32. }
    33. if(flag=1)
    34. {
    35. cout<<"YES"<
    36. for(int i=0;i
    37. {
    38. cout<
    39. }//如果有座,输出“YES”
    40. }
    41. else
    42. {
    43. cout<<"NO"<
    44. }//否则输出“NO”
    45. }
    46. return 0;
    47. }

    总结

    将每两个座位作为一组进行判断进行一一判断

    F - 字符串操作 

    题目链接

    题意

    给定长度为n的字符串s,进行m次操作,每次将[l,r]范围内所有c1字符改成c2

    思路

    1.双重for循环
    2.在l到r的范围内将c1更改为c2

    坑点

    1.r一定小于n

    算法

     1.定义两个变量n,m
     2.定义一个字符串a
     3.用for循环找到需要更改的位置
     4.输出更改完成后的答案

    实现步骤

    1.用双重for循环
    2.在l到r的范围内将c1更改为c2

    代码

    1. #include
    2. using namespace std;
    3. int main( )
    4. {
    5. int n,m;
    6. string a;
    7. cin>>n>>m;//输入长度n,操作次数m
    8. cin>>a;
    9. for(int i=0;i
    10. {
    11. int l,r;//区间
    12. cin>>l>>r;
    13. char c1,c2; //将c1更改为c2
    14. cin>>c1>>c2;
    15. for(int j=l-1;j
    16. {
    17. if(a[j]==c1)
    18. {
    19. a[j]=c2;//找到后更改
    20. }
    21. }
    22. }
    23. cout<//输出更改后的
    24. return 0;
    25. }

    总结

    考察字符替换方法,用到二重循环

     

  • 相关阅读:
    OpenAI 官方: 如何构建 Prompt 最佳策略
    MATLAB2016笔记(十):曲线拟合、参数估计
    exe4j打包jar包生成exe文件BUG日记
    如何图片批量重命名编号不要汉字?
    项目在linux上的简单部署
    数据结构实验六 栈和队列的基本操作及应用
    MYSQL数据库之用户管理
    ChatGPT私有数据结合有什么效果?它难吗?
    安全运营中心即服务提供商评估
    linux下C语言如何操作文件(二)
  • 原文地址:https://blog.csdn.net/m0_63353853/article/details/128160583