P1317 低洼地[入门]

https://www.luogu.com.cn/problem/P1317
涉及知识点:模拟
入门题
思路:
一.枚举每一个高度,并分成下降段和上升段。
二.输出ans-2 //因为首尾多算了2个
代码:
复制代码
#include <bits/stdc++.h> using namespace std; int n,m,a[100001],ans,k; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); int i=1; while(i<=n){ while(a[i]<=a[i-1]&&i<=n) i++;//1 while(a[i]>=a[i-1]&&i<=n) i++;//2 ans++;//一段完了多一个答案 } printf("%d",ans-2);//最开始与最后都算了所以减掉 return 0; }
复制代码

方法2

思路:去重

复制代码
#include<iostream> #include<string> using namespace std; int nu[10521]; int main(void){ int n,i,p,ans = -1; cin>>n; for(i=0;i<n;i++){ cin>>p; if(i&&p==nu[i-1]){i--;n--;continue;} nu[i] = p; }/*输入时,删掉前后高度相同的,合并为一个山峰*/ for(i=1;i<n-1;i++) if(nu[i-1]<nu[i]&&nu[i]>nu[i+1])ans++; cout<<ans; return 0; }
复制代码

方法3

代码;

复制代码
#include <iostream> #include <cstring> using namespace std; int main() { int a, b, ans=0, l=0,n; cin >>n>>a; //建立一个n,输入 后面跟第一个数字, for (int i = 1; i <= n; i++)//for循环在未满足长度时继续循环 { cin >> b; //输入第二个数字 if (b < a) { //当b<a的时候,就是左坡高于b l = 1; //使l=1做标记 } if (b > a&&l == 1) { //当第二个输入的b大于a时,就是右坡高于中间 ans++; l = 0; //使答案+1,标记用的l变为0 } a = b; //让a=b(就是一个重新赋值)下方有图 } cout << ans; //当全部结束后,输出可能形成水洼的个数 }
复制代码

   

执行a=b之后

然后再一次输入b

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16446378.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示