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


    D-Laptop

    题目链接

    知识点:一维数组、for循环


    题意

    给你一个整数n(笔记本的数量),接下来n行每行两个Mi,Si(表示内存和速度)。

    问被完虐的笔记本数。(完虐即内存和速度都不高于另外某一个笔记本)。

    思路

    1. 首先笔记本的内存和速度一般是多个,所以可以使用数组进行读入

    2. 然后判断是否完虐即Mi<=Mj并且Si<=Sj并且j不等于i的时候,属于完虐

    3. 属于完虐则进行计数,最后输出数量

    坑点

    完虐的定义是都不高于是包括等于的情况的

    代码

    1. #include
    2. int main()
    3. {
    4. int n;//笔记本的数量
    5. int m[100010],s[100010];//m数组表示内存,s数组表示速度,n的范围是10^5,所以开大一点
    6. int cnt=0;//用于记录属于完虐的数量
    7. scanf("%d",&n);
    8. for(int i=1;i<=n;i++)//利用for循环读入内存和速度
    9. {
    10. scanf("%d %d",&m[i],&s[i]);
    11. }
    12. for(int i=1;i<=n;i++)//利用两层for,遍历判断
    13. {
    14. for(int j=1;j<=n;j++)
    15. {
    16. if(m[i]<=m[j]&&s[i]<=s[j]&&j!=i)//属于完虐的情况
    17. {
    18. cnt++;//数量+1
    19. break;//停止,为了避免 i 和 j 相同 加重复
    20. }
    21. }
    22. }
    23. printf("%d",cnt);//输出数量
    24. return 0;
    25. }

    总结

    难度简单,细心点问题不大

    E- 阶乘计算

    题目链接

    知识点:阶乘、for循环

    题意

    输入一个整数n,让你计算S=1!+2!+3!+…+N!的值,输出S

    思路

    1.首先要知道阶乘是什么(阶乘也就是连乘,1的阶乘是1,二的阶乘是1*2=2,3的阶乘是1*2*3=6)

    2.而题目让求的是阶乘的和(也就是每个的阶乘相加)

    3.最后输出和

    坑点

    代码

    1. #include
    2. int main()
    3. {
    4. int n;
    5. scanf("%d",&n);
    6. int sum=0;//记录阶乘和
    7. int cnt=1;//为了便于后边的阶乘
    8. for(int i=1;i<=n;i++)
    9. {
    10. cnt*=i;//每个的阶乘
    11. sum+=cnt;//阶乘相加
    12. }
    13. printf("%d",sum); //输出总和
    14. return 0;
    15. }

    总结

    难度简单,一定要读清题目

    F-最大最小值 

    题目链接

    知识点:if判断

    题意

    给你三个整数a,b,c.让你输出其中的最大值和最小值

    思路

    1.定义一个最大值和最小值的变量,并将其中的一个值赋给最大值和最小值

    2.然后用其余的两个跟最大值和最小值进行比较,如果大或者小,则进行最大值和最小值

    3.最后输出最大值和最小值

    坑点

    注意格式,输出最大值后需要换行

    代码

    1. #include
    2. int main()
    3. {
    4. int a,b,c;
    5. scanf("%d %d %d",&a,&b,&c);
    6. int max=a,min=a;//max表示最大值,min表示最小值,并将a赋给他们
    7. if(b>max)//b比最大值大
    8. {
    9. max=b;//更新 max 的值,将 b 赋给 max
    10. }
    11. if(c>max)//c比最大值大
    12. {
    13. max=c;//更新 max ,将 c 赋给 max
    14. }
    15. if(b//b比最小值小
    16. {
    17. min=b;//更新min,将b赋给min
    18. }
    19. if(c//c比最小值小
    20. {
    21. min=c;//更新min,将b赋给min
    22. }
    23. printf("The maximum number is : %d\n",max);
    24. printf("The minimum number is : %d",min);
    25. return 0;
    26. }

    总结

    难度简单,注意格式

    G - [NOIP2005]校门外的树 

    题目链接

    知识点:for循环

    题意

    给你一个整数l表示马路长度和一个整数m表示区域的数量,和m个区域的范围(起始点和终止点),区间之间可能有重合的部分,现要将区域的树移走(包括两个端点的树)问马路上剩余的树的树量

    思路

    1.首先遍历m次,读入区域范围,并进行标记

    2.遍历马路的长度,若值未改变则表示未被移走,计数++

    3.最后输出数量

    坑点

    马路的长度是从0开始的,而不是从1开始

    代码

    1. #include
    2. int main()
    3. {
    4. int l,m;
    5. int x,y;//区域的起始点x,终止点y
    6. int a[10010]={0};//将数组的值都赋值为0
    7. scanf("%d %d",&l,&m);
    8. for(int i=1;i<=m;i++)//m个区域,遍历m次
    9. {
    10. scanf("%d %d",&x,&y);
    11. for(int j=x;j<=y;j++)//再次利用for 循环遍历区域的范围,并标记为1 表示这些树被移走了
    12. {
    13. a[j]=1;
    14. }
    15. }
    16. int ans=0;//记录剩下的树的数量
    17. for(int i=0;i<=l;i++)//遍历马路长度,是从0开始的而不是1
    18. {
    19. if(a[i]==0)//如果该位置值为 0,也就是未被移走
    20. {
    21. ans++;//计数+1
    22. }
    23. }
    24. printf("%d",ans);//输出未被移走的数量
    25. return 0;
    26. }

    总结

    难度稍难,不容易被想到,要多思考

  • 相关阅读:
    动态规划之状态压缩
    Vue - Router
    分享记账的目的,选择的记账方法
    Springboot面向会员体系的电商平台an5y9计算机毕业设计-课程设计-期末作业-毕设程序代做
    两日总结十
    两道 杂题
    JavaEE初阶:网络编程套接字
    五、ROS2接口及其使用
    【Vant2】Tab标签页组件自动跳转的坑
    【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(2,常见随机变量及其分布 | 随机变量函数的分布)
  • 原文地址:https://blog.csdn.net/m0_63353853/article/details/128104898