30867 goc编程题 股票的峰值和谷底

题目描述

我们用n条直线的高度表示n天股票的指数大小。相邻直线的间隔距离是20。通常直线颜色用黑色(0号色),但如果某个直线的左右都比它低,它就是一个高峰值,我们用红色(1号色)画这个直线;如果某个直线的左右都比它高,它就是一个低谷值,我们用绿色(3号色)画这个直线。例如n=5,5天的股票大小为50 80 60 40 70,画出的图为:

image.png

第1条是长度是50的黑色线段,第2条是长度是80的红色线段,第3条是长度是60的黑色线段,第4条是长度是40的绿色线段,第5条是长度是70的黑色线段。

有些数据中会出现相邻的数是相同的情况,这个时候判断是否是高峰值或低谷值就要看前后不相同的数的情况。例如n=9,9天的股票大小为50 80 80 60 40 40 40 70 70,画出的图为:

image.png

输入格式 第一行1个整数n,表示股票天数。(2<20)

第二行n个整数,表示每天股票指数大小。范围[10,300]。

[说明] 60%的数据中,每天股票指数的大小都不相同。

输出格式 画相应的图形。

输入/输出例子1

输入:

10

20 40 60 100 80 60 150 180 90 120

输出:

image.png

题解

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;
}