您的位置:首页 > 编程语言 > Go语言

OVa OJ 488 - Triangle Wave

2014-10-01 09:42 375 查看
先来一手丑的

#include <iostream>

using namespace std;

void tri_wave(int amplitude)
{
for (int i = 1; i <=amplitude; ++i)
{
for (int j = 1; j <= i; ++j)
{
cout << i;
}
cout << endl;
}
for (int i = amplitude - 1; i > 0; --i)
{
for (int j = 1; j <= i; ++j)
{
cout << i;
}
cout << endl;
}
}

int main()
{
int times,amp,frequency;
cin >> times;
cout << endl;
for (int i = 0;i!=times;++i){
cin >> amp >> frequency;
for (int j = 0; j != frequency; ++j){
tri_wave(amp);
cout << endl;
}
cout << endl;
}
return 0;
}


这个显然很丑,如果tri_wave里面用if判断还是很丑。解决这一问题的办法就是从数字本身去思考,对于amplitude=4的情形,实际上每个波浪我们需要输出7行,行数和输出的数字个数以及值的关系是

1 1 , 2 2 ,3 3, 4 4, 5 3, 6 2,7 1

这个图像显然是绝对值函数4-abs(x-4),利用这个思路我们重写tri_wave函数

void tri_wave(int amplitude)
{
for (int i = 1; i <= 2*amplitude-1; ++i)
{
int temp = amplitude - abs(i - amplitude);
for (int j = 1; j<=temp; ++j)
{
cout << temp;
}
cout << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Algorithm