1046-鹏,几个通过的程序答案却不同,这题是不是有问题?
题目是; HtBest的小鲲长大变成了大鹏,大鹏在天际翱翔,看到了一片绵延的山脉,每座山都有自己的高度,大鹏想穿过这片山脉。由于他只能紧贴地面飞行, 他想知道他一共要翻越几次大山(上升->平飞->下降,算一次,其中平飞可以没有),初始时,大鹏在山脉的左端。 链接:https://ac.nowcoder.com/acm/contest/19305/1046 来源:牛客网输入描述:
第一行一个正整数n,表示山脉被分为n段。 第二行有n个正整数ai两两之间用空格分开,ai表示山脉第i段的高度。输出描述:
一行,包含一个正整数,表示大鹏需要翻越几次大山。备注:
对于100%的测试数据: 1 ≤ n ≤ 1000000 1 ≤ ai ≤ 1000000000 数据量较大,注意使用更快的输入输出方式。
出现问题的测试数据:
50
1 1 5 9 6 5 3 2 4 1
2 5 6 3 7 2 5 2 5 2
8 9 6 2 3 5 2 1 1 0
2 4 5 6 6 3 1 5 7 8
3 6 6 6 8 2 8 2 8 2
这是我的代码:
#include<iostream> using namespace std; int main() { int n; while(cin>>n){ int a[10]={100000}; int down=0,up=0,num=0; int i=1,j=1,t=0; while(t++<n){ cin>>a[j]; if(j==8){ j=1; i=1; a[1]=a[8]; a[0]=a[7]; } if(a[i]>a[i-1]){ up=1; } else if(a[i]<a[i-1]){ if(up==1){ up=0; num++; } down=1; } j++; i++; } cout<<num<<endl; } }
这是答案(已通过)一:
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int INF = 0x3f3f3f3f;
ll fp(ll a, ll n) {
int base = a;
int res = 1;
while (n) {
if (n & 1)res *= base;
base *= base;
n >>= 1;
}
return res;
}
bool judge(int x) {
bool ans;
if (x == 1) {
ans=false;
}
else {
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
ans=false;
}
}
ans=true;
}
return ans;
}
int main() {
int n;
while(cin>>n){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
vector<int> vec;
for (int i = 0; i < n; i++) {
cin >> t;
vec.push_back(t);
}
int ans = 0;
for (int i = 1; i < n - 1; i++) {
if (vec[i] > vec[i - 1] && vec[i] > vec[i + 1]) {
ans++;
}
}
cout << ans << endl;
}
}
这是答案(已通过)二:
#include <bits/stdc++.h>
using namespace std;
long long n;
void solve()
{
vector < long long > a(n,0),b(n+2,0);
long long i,ans=0,tag=0;
for (i=0;i<n;i++)
cin>>a[i];
if (n<3) cout<<0;
else
{
if (a[1]>a[0]) b[0]=a[0]-1;
else b[0]=a[0]+1;
b[n+1]=a[n-1]-1;
for (i=1;i<=n;i++)
b[i]=a[i-1];
for (i=1;i<=n;i++)
{
if (b[i]>=b[i-1]) tag=1;
else
{
if (tag) {tag=0;ans++;}
}
}
cout<<ans;
}
cout<<endl;
}
int main()
{
while(cin>>n)
solve();
}
#算法题目求助##学习路径#