OI練習 數列

2021-07-28 03:07:42 字數 1071 閱讀 7628

description

給定一串整數數列,求出所有的遞增和遞減子串行的數目,如數列7,2,6,9,8,3,5,2,1可分為(7,2),(2,6,9),(9,8,3),(3,5),(5,2,1)5個子序列,答案就是5,我們稱2,9,3,5為轉折元素。
input

輸入第一行為n(n <= 100);第二行為n個數;
output

輸出所有的遞增和遞減子串行的數目

sample input

9

7 2 6 9 8 3 5 2 1

sample output

5
題目分析

一開始嘗試直接計算遞增子串行和遞減子串行數目,但一直除錯不對。

再次分析題目發現:本題中的子串行,是連續的。為此,我們只需算出遞增遞減的轉折次數+1即可。

即有:walk*(a[i]-a[i-1])>0代表未發生轉折

walk*(a[i]-a[i-1])<0代表發生轉折

walk為當前點的前兩項之差

#include

#include

#include

#include

#include

using

namespace

std;

int main()

int up=0,down=0,walk=0;

walk=a[1]-a[0];

if (walk>0)

up +=1;

else down +=1;

for (int i=2;iif (walk*(a[i]-a[i-1])<0)

}printf("%d",up+down);

}

練習 數列及數列求和

關鍵在於前3項單獨處理,從第4項開始迴圈 include using namespace std intmain if n 2 n 3 當n為第二項或第三項時,f都為1 for i 4 i n i 從第4項開始進行迴圈 cout f endl return0 前幾項是1,1,2,3,5,每一項都等於...

基礎練習 數列特徵

基礎練習 數列特徵 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給出n個數,找出這n個數的最大值,最小值,和。輸入格式 第一行為整數n,表示數的個數。第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。輸出格式 輸出三行,每行乙個整數。第一行表示這些數中的最大值,第二行表示...

基礎練習 數列排序

問題描述 給定乙個長度為n的數列,將這個數列按從小到大的順序排列。1 n 200 輸入格式 第一行為乙個整數n。第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。輸出格式 輸出一行,按從小到大的順序輸出排序後的數列。樣例輸入 5 8 3 6 4 9 樣例輸出 3 4 6 8 9 內部...