这题不难,只需要理解题目的意思就行。
首先输入天数,然后输入每天净资产变化。
之后统计每天的净资产,可以用一个数组 a,但要注意题目中每个曲线所在的行。
统计净资产的最大和最小值,可以用 maxn 和 minn,以求表格大小,还是要注意每个曲线所在的行,还得注意 maxn 要初始化成 -1,而 minn 是 0,这样在 maxn 或 minn 没有被记录时,默认值就是图表的中间。
绘图前记得先初始化,绘图时对应的行可以用 maxn 减去数值求出,注意转义符。
最后输出。
完整代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[105],maxn=-1,minn=0,p;
string s;
char c[105][105];
int main()
{
cin>>n>>s;
a[0]=0;
for(int i=0;i<n;i++)
{
switch(s[i])
{
case '+':
{
a[i+1]=a[i]+1;
maxn=max(maxn,a[i]); //记当天开始时
break;
}
case '-':
{
a[i+1]=a[i]-1;
minn=min(minn,a[i+1]); //记当天结束时
break;
}
case '=':
{
a[i+1]=a[i];
maxn=max(maxn,a[i+1]); //说不定比向上曲线更高
break;
}
}
}
p=maxn-minn+1;
for(int i=0;i<p;i++)
{
for(int j=0;j<n;j++)
{
c[i][j]='.'; //初始化
}
}
for(int i=0;i<n;i++)
{
switch(s[i])
{
case '+':
{
c[maxn-a[i]][i]='/';
break;
}
case '-':
{
c[maxn-a[i+1]][i]='\\'; //注意转义符
break;
}
case '=':
{
c[maxn-a[i]][i]='_';
break;
}
}
}
for(int i=0;i<p;i++)
{
for(int j=0;j<n;j++)
{
cout<<c[i][j];
}
cout<<endl;
}
return 0;
}