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 內部...