30867 goc编程题 股票的峰值和谷底
题目描述
我们用n条直线的高度表示n天股票的指数大小。相邻直线的间隔距离是20。通常直线颜色用黑色(0号色),但如果某个直线的左右都比它低,它就是一个高峰值,我们用红色(1号色)画这个直线;如果某个直线的左右都比它高,它就是一个低谷值,我们用绿色(3号色)画这个直线。例如n=5,5天的股票大小为50 80 60 40 70,画出的图为:
第1条是长度是50的黑色线段,第2条是长度是80的红色线段,第3条是长度是60的黑色线段,第4条是长度是40的绿色线段,第5条是长度是70的黑色线段。
有些数据中会出现相邻的数是相同的情况,这个时候判断是否是高峰值或低谷值就要看前后不相同的数的情况。例如n=9,9天的股票大小为50 80 80 60 40 40 40 70 70,画出的图为:
输入格式 第一行1个整数n,表示股票天数。(2<20)
第二行n个整数,表示每天股票指数大小。范围[10,300]。
[说明] 60%的数据中,每天股票指数的大小都不相同。
输出格式 画相应的图形。
输入/输出例子1
输入:
10
20 40 60 100 80 60 150 180 90 120
输出:
题解
int f[50];
int main(){
int a=30;
int n;
// cinWin();
cin >> n;
for (int i=1; i<=n; i++)
cin >> f[i];
for (int i=1; i<=n; i++)
{
p.c(0);
if (i>1 && i<n )
{
//找两边大的
int left=0;
int right=0;
for (int j=i-1; j>=1 ; j--)
if (f[i]>f[j]) break;
else if (f[i]<f[j]) {left=1;break; }
for (int j=i+1; j<=n ; j++)
if (f[i]>f[j]) break;
else if (f[i]<f[j]) {right=1;break;}
if (left && right) p.c(3);
else {
//找两边小的
left=0;
right=0;
for (int j=i-1; j>=1 ; j--)
if (f[i]<f[j]) break;
else if (f[i]>f[j]) {left=1;break;}
for (int j=i+1; j<=n ; j++)
if (f[i]<f[j]) break;
else if (f[i]>f[j]) {right=1;break;}
if (left && right) p.c(1);
}
}
p.fd(f[i]).bk(f[i]);
p.rt(90).up().fd(20).lt(90).down();
}
p.hide();
return 0;
}