首页 / C++ / 洛谷P1567统计天数 C++解法
洛谷P1567统计天数 C++解法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了洛谷P1567统计天数 C++解法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2703字,纯文字阅读大概需要4分钟。
内容图文
洛谷P1567统计天数
先上我的失败代码:
#include<stdio.h>
#include <iostream>
#include <iomanip>
#include<cmath>
#include <algorithm>
using namespace std;
int main()
{
int n;
int temp[100001] = { 0 };
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> temp[i];
}
int cnt = 0;
int times = 0;
int daynum = 0;
/*
cnt:加到哪一位了
times:递增几位了
num[]:递增天数记录
daynum:num数组的位标
思路是利用逐个记录递增的天数再利用sort函数排列,之后求最大值。
*/
int num[100000] = { 0 };
while (cnt<n) {
for (int i = 0; ; i++)
{
if (temp[cnt+i] < temp[cnt + i+1]) {
times++;
continue;
}
else
{
if (i != 0)
{
cnt = cnt + i;
}
else
{
cnt = cnt + 1;
}
if (times == 0)
{
num[daynum] = times;
}
else
{
num[daynum] = times+1;
}
times = 0;
daynum++;
break;
}
}
}
sort(num, num + daynum);
cout << num[daynum - 1];
}
不足之处
1.本题数据量大,10的6次方,在达到这个大数字的数据下,我定义的数组空间是不足以存储的,而在改正之后,程序出现异常,提示说栈空间不足…当然这也不能怪罪别人,主要还是由于我自己思路的局限性,没有考虑到可以使用实时更替的一个变量储存值来代替数组的存储、排序
2.对题目的思路还不够清楚,我这个思路必然不是最优解…(废话不然怎么会错) 导致代码太啰嗦了…
决定以后洛谷解题系列的文章都要挑一个高效且思路清晰的标准答案作为对比…
3.还是没有特意考虑数据刚好是边界值的情况,不够严谨。
好的地方:(我还是得夸自己)
1.在思考的时候,遇到想不清楚的地方知道在本子上好好列思路图和各个变量的作用来整理自己的思路
2.吸取了前几次编程的教训,计数变量有及时清零。
3.上学期期末复习发现的sort函数活学活用了!
标准解答
#include<stdio.h>
#include <iostream>
#include <iomanip>
#include<cmath>
#include <algorithm>
using namespace std;
int main(){
int n,tem1=0,tem2=0,a=0,b=0;//分别是N,温度1,温度2,以及统计天数用的两个参量
cin>>n;
for(int k=0;k<n;k++){
cin>>tem2;
if(tem2>tem1)
a+=1;//若第二天(tem2)的温度大于前一天的温度(tem1),则天数加一
else{
b=(a>b)?a:b;//否则,令b等于a,b中较大值
a=0;//并把a清空
}
tem1=tem2;//对于第三天来说,第三天的温度是tem2,第二天的温度是tem1
}
cout<<b+1;//本代码天数统计的起点是0,但题目是1,也可在初始赋值是将a=0改为a=1
return 0;
}
}
思路:
大佬的思路大致是这样的:
首先利用获得的数据总数建立for循环,不断获得接下来输入的数字,但是不把数字存在数组里,而是当下利用变量储存完、使用完,出循环之后在利用原来的变量容器来储存新的数据,从而达到了不开辟大数组,占用内存少的目的。
接下来对于获得的温度,与前一天的对比,大于则a++,小于则表明递增结束了,那么就与储存一直以来最大值的b进行比较。(同时这里利用的三目运算符一次性完成了取ab最大值的操作)
最后根据题目的性质输出b
收获总结:
1.对于这种,大规模数据求xx最大值的题目,不要急着建立大数组,可以考虑利用for循环,完成随到随处理。
2.求最大值可以建立两个变量,一个储存当下的每个值,另一个存目前为止的最大值,这样也避免了建立数组的麻烦和耗时
写在最后
我失去了一只臂膀
就睁开了一只眼睛
——顾城《杨树》
:)thanks for your reading
内容总结
以上是互联网集市为您收集整理的洛谷P1567统计天数 C++解法全部内容,希望文章能够帮你解决洛谷P1567统计天数 C++解法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。