刷题笔记-24年3月第三组
Created at Updated at

1402 Words

24年-3月-第三组

P1424★

小鱼的航程(改进版):小鱼每天游250 miles,周末不游泳,计算从周x开始,到n天以后小鱼一共累计游泳的公里数;

思路

  • 读入x,n;创建count记录游泳的公里数;
  • x需要在一周的时间内循环,循环n次;
  • 公里数自加250但需要跳过周末;
  • 用x mod 7,实现x从周一到周日的循环;

总结

  • 不是很难的一道题,理解模运算(取余)是关键:
    while(count<n)
    {
        day = x%7;   //获取日期
        if(day!=6&&day!=0)  //判断是否是周六日
        {
            sum+=250;
        }
        count++;
        x++;
    }

P1425 ★

小鱼的游泳时间:小鱼从a时b分游到c时d分,计算小鱼当天的游泳时间;

思路

24小时制,需要处理时分的计算问题;

  • 若d>=b,则对应位置直接相减;
  • 若d<b,则时位需要相减后-1,分位为60+d-b;

总结

很容易的一道题;

P1426 ★★★★★

小鱼会有危险吗:小鱼从A开始游,第一秒游7m,第二秒游上一秒的0.98;在A外s米处设置探测器,探测器左右x米之内是探测范围,判断小鱼受否会有危险;

思路

  • 读入位置s和探测器范围x;
  • 判断小鱼游入范围后的秒速,并判断下一秒能否游出去;

总结

通过不了oj,测试点下载下来自己测试没有任何问题

    int d=s+x-mile;
    if(s+x==mile) cout<<"n";
    if(d<=0) cout<<"n";   //不用游下一步就已经游在了范围之外
    if(d>0&&d>l) cout<<"y";   //下一秒仍然在范围内
    return 0;

P1427 ★

小鱼的数字游戏:输入一串数组,以0结束,将用户输入的数据反转;

思路

  • 将数据输入数组
  • 将数据反转
  • 可以用p定位数组的大小

总结

很简单,有一次用到了while(cin»input);


    while(cin>>input)
    {
        if(input==0) break;
        num[p]=input;
        p++;
    }
    for(int i=p-1;i>=0;i--)
    {
        cout<<num[i]<<" ";
    }

P1428 ★

小鱼比可爱:从左到右边一排,表示小鱼,只看得到左边的鱼的颜值,输出小鱼眼中的不如自己可爱的鱼的个数;

思路

  • 输入数组
  • 循环遍历每只鱼,比较之前的鱼与自己的颜值;

总结

要在for循环外用计数器

    num1[0]=0;
    for(int i=1;i<n;i++)    //遍历除了第一只以外的每一只小鱼
    {   int count=0;
        for(int j=0;j<i;j++)   //将该之前的鱼的颜值与自己的作比较
        {
            if(num[j]<num[i]) count++;
        }
        num1[i]=count;
    }

P1482 ★

Cantor表(升级版):输入两个分数,计算它们的乘积,对应到cantor表中的位置坐标;

思路

  • 输入分数a,b
  • 计算乘积
  • 找到对应的位置 一开始勿用了stoi定位到分子和分母;但是这样做只能满足十位以内的分子和父母,下面是正确的解法;
    for(int i=0;i<a.size();i++)
    {
        if(a.at(i)=='/')
        {
            q=stoi(a.substr(0,i));
            w=stoi(a.substr(i+1,a.size()-i));
        }
    }

总结

关键点在于找到最大公约数

#include<algorithm>
int num=__gcd(c1,c2);

P1534 ★

不高兴的津津(升级版):津津的心情会持续到第二天了,需要计算津津的不高兴程度;

思路

  • 计算当天的不高兴程度
  • for循环中累加每天的不行程度

总结

逻辑不算难,审题出问题了,题目要的是不高兴的程度之和

    for(int i=0;i<n;i++)  //计算n天后结束后的不高兴程度
    {
        cin>>a>>b;
        sad+=a+b-8;  //计算当天的不高兴程度
        sum+=sad; //计算每天的不高兴程度的和
    }

P1548 ★★★

棋盘问题:N x M的方格期盼。计算其中的正方形个数和长方形个数 棋盘问题图片 如上图,共有8个正方形,10个长方形

思路

感觉有点复杂,看题解了,应该用枚举法

  • 遍历每个点
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            for(int k=i+1;k<=m;k++)
            {
                for(int l=j+1;l<=n;l++)
                {
                    if(k-i==l-j)
                        count1++;   //正方形
                    else
                        count2++;   //长方形
                }
            }
        }
    }

总结

好像不算太难,后续可以二刷;

P1554 ★

梦中的统计:给出区间的两个端点,统计区间内所有的整数中每个数码(0-9)出现的个数;

思路

  • 用一个vector数组存放0-9的出现频次
  • 读入端点
  • 遍历区间中的每个数
  • 整型变成字符串,在拆分统计

总结

思路没问题,一遍就通过了:

    for(int i=m;i<=n;i++)     //统计每个数字中的字码频数
    {
        string str=to_string(i);
        for(int j=0;j<str.size();j++)    //拆分字码
        {
            int p=stoi(str.substr(j,1));
            num[p]++;
        }
    }

P1567 ★

统计天数:统计最高气温一直上升的最长连续天数

思路

  • 读入连续n天的数据
  • 统计连续上升的天数

总结

与之前的某一道题类似,比较简单,一次通过,关键的三个变量p,max,count和while循环:

    while(p<n)
    {
        if(num[p]>num[p-1]) count++;
        else count=1;
        if(count>max) max=count;
        p++;
    }