在一個整數數組上,對於下標為i的整數,如果它大於所有它相鄰的整數,
或者小於所有它相鄰的整數,則稱為該整數為一個極值點,極值點的下標就是i。
每個案例的輸入如下:
有2×n+1行輸入:第一行是要處理的數組的個數n;
對其余2×n行,第一行是此數組的元素個數k(4
每個案例輸出為n行:每行對應於相應數組的所有極值點下標值,下標值之間用空格分隔。
樣例輸入:3 10 10 12 12 11 11 12 23 24 12 12 15 12 12 122 112 222 211 222 221 76 36 31 234 256 76 76 15 12 14 122 112 222 222 222 221 76 36 31 234 256 76 73樣例輸出:
0 7 2 3 4 5 6 10 12 0 2 3 10 12 14
C++代碼:
#include#include using namespace std; int main() { int n; while(cin >> n) { while(n--) { int k,i; cin >> k; vector vv(k); for(i = 0;i < k;i++) cin >> vv[i]; vector out; out.reserve(k); if(vv[0] < vv[1]||vv[0] > vv[1]) out.push_back(0); for(i = 1;i <= k-2;i++) { if(vv[i] > vv[i-1]&&vv[i] > vv[i+1]) out.push_back(i); if(vv[i] < vv[i-1]&&vv[i] < vv[i+1]) out.push_back(i); } if(vv[k-1] < vv[k-2]||vv[k-1] > vv[k-2]) out.push_back(k-1); for(i = 0;i < out.size() - 1;i++) cout << out[i] << " "; cout << out[i] << endl; } } return 0; } /************************************************************** Problem: 1126 User: Carvin Language: C++ Result: Accepted Time:40 ms Memory:1520 kb ****************************************************************/
C++另一種思路:
#include
using
namespace
std;
void
f(
int
a[],
int
n)
{
int
i=0;
if
(a[0]!=a[1])
cout<<0;
for
(i=1;i
{
if
((a[i]>a[i-1])&&(a[i]>a[i+1])||(a[i]
cout<<
" "
<
}
//for
if
(a[n-1]!=a[n-2])
cout<<
" "
<
cout<
}
int
main()
{
int
n;
int
a[100];
int
i,j,k;
while
(cin>>n)
{
for
(i=0;i
{
cin>>k;
for
(j=0;j
{
cin>>a[j];
}
//for
f(a,k);
}
//for
}
//while
return
1;
}
//main
/**************************************************************
Problem: 1126
User: Carvin
Language: C++
Result: Presentation Error
****************************************************************/