ZOJ 2423

来源:互联网 发布:网络协议组成部分为() 编辑:程序博客网 时间:2024/06/08 13:50

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1423


预处理,动态规划的思想,处理的时候要把每一行的空格补全(处理成一个矩形),在处理的时候才方便,最后去掉多余的空格。

但是在字符串处理的时候错了很多次,string 好像不能直接对末尾的那个字符串进行这样的赋值 str[i][j]='\0';。


下面是AC代码:

#include<iostream>#include<string>#include<cmath>using namespace std;string str[8][1000];int main(){int n,i,j,k;str[1][0]="X";int len;for(i=2;i<=7;i++){len=pow(3,i-2);for(j=0;j<len;j++){str[i][j]=str[i-1][j];}for(j=0;j<len;j++){for(k=0;k<str[i-1][0].size();k++)str[i][j]+=" ";}for(j=0;j<len;j++){str[i][j]+=str[i-1][j];}for(j=len;j<2*len;j++){for(k=0;k<str[i-1][0].size();k++)str[i][j]+=" ";}for(j=len;j<2*len;j++){str[i][j]+=str[i-1][j-len];}for(j=len;j<2*len;j++){for(k=0;k<str[i-1][0].size();k++)str[i][j]+=" ";}for(j=2*len;j<3*len;j++){str[i][j]=str[i-1][j-2*len];}for(j=2*len;j<3*len;j++){for(k=0;k<str[i-1][0].size();k++)str[i][j]+=" ";}for(j=2*len;j<3*len;j++){str[i][j]+=str[i-1][j-2*len];}    }//for() for (i=1; i<=7; i++)          for ( j=0, k; j<pow(3,i-1); j++)          {              string tmp=str[i][j];              for (k=tmp.length()-1; k>=0; k--)                  if (tmp[k]!=' ') break;  str[i][j]=str[i][j].substr(0,k+1);          //  str[i][j].assign(tmp, 0, k+1);       //这个地方错了无数次啊。左边那两种方法都可以,但是为什么不可以写成:str[i][j+1]='\0'呢;        }                                          //估计是sting是对象,不能直接对对象操作??while(cin>>n&&n>=0){if(n==0)cout<<"-"<<endl;else{for(i=0;i<pow(3,n-1);i++)cout<<str[n][i]<<endl;cout<<"-"<<endl;}}return 0;}


原创粉丝点击