您的位置:首页 > 其它

hdu 2091 空心三角形

2016-04-25 01:08 375 查看
运用了上篇博客(dp数塔)中提到的逆向思维,从底下往上依次向二维数组(对于许多作图题,二维数组是个非常实用的自定义数据)中填入字符c,(当然,不逆向也可以,但是介于我要多多熟悉逆向思考,所以这里就逆向了)。

#include <iostream>

#include <cstdio>

#include <cstring>

#define MAX 100

using namespace std;

char a[MAX][MAX];

int main()

{

//freopen("result.txt","w",stdout);

int cnt=1;

char c;

while(cin>>c)

{

if(c=='@')break;

int n;

cin>>n;

if(cnt>1) cout<<endl;

for(int i=0; i<2*n-1; i++){

memset(a[i],' ',sizeof(a[i]));

a[i][2*n-1]=0;

}

a[0]
=0;

;

for(int i=0; i<2*n-1; i++)

a[n-1][i]=c;

for(int i=n-1;i>0;i--)

{

a[i-1][i+n-1]=0;

a[i-1][n-i]=c;

a[i-1][i+n-2]=c;

}

;

for(int i=0; i<n; i++)

cout<<a[i]<<endl;

cnt++;

}

//fclose(stdout);

return 0;

}

(1).一开始我开了个45*45大小的数组(数据),提交后就Runtime Error(ACCESS_VIOLATION)

了,这个错误,一般原因就是数组开小了,运行过程中超出了,找了找,原因就在于i<2*n-1,而n<42,乘个2肯定超啊,后来改为100就碰上了PE,这题目要求也是不太一样,要第一例之后每一例输入后输出一空行,还好看了discuss。

(2).本题实现代码(算法):

for(int i=n-1;i>0;i--)

{

a[i-1][i+n-1]=0;

a[i-1][n-i]=c;

a[i-1][i+n-2]=c;

}
通过例子总结出a[i-1][n-i]=c;

a[i-1][i+n-2]=c;

a[i-1][i+n-1]=0;用来控制格式(每行末没有空格)

(3).随着做题数目的增加,愈发意识到那条编程的黄金定律:数据+算法=程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: