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++;
}