这题神坑啊,案例省略了左边的空格。我照着案例写怎么写也不对。。。
这是一道排序题?注意几点:
1. 输出的空格数到底有多少。
2. 及时截断字符串!及时截断字符串!及时截断字符串!(WA3次的理由)
3. debug的时候可以用特殊字符(如下划线)代替空格。(这是很蠢的建议但是确实很有用)
附C代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {char c; int line, colum;}Wave;
int cmp(const void *a, const void *b)
{
Wave *p1=(Wave*)a, *p2=(Wave*)b;
if(p1->line==p2->line) return p1->colum-p2->colum;
else return p2->line-p1->line;
}
int main()
{
char all[85];
Wave w[85];
int i, j, k, l, max, min;
while(scanf("%s",all)!=EOF)
{
l=strlen(all);
w[0].c=all[0];
w[0].line=0;
w[0].colum=0;
for(i=1, j=0; i<l; i++)
{
w[i].c=all[i];
w[i].colum=i;
if(all[i]==all[i-1]) w[i].line=w[i-1].line;
else if(all[i]>all[i-1]) w[i].line=w[i-1].line+1;
else w[i].line=w[i-1].line-1;
}
qsort(w, l, sizeof(w[0]), cmp);
max=w[0].line;
min=w[l-1].line;
for(i=max, k=0; i>=min; i--)
{
j=0;
max=w[k].colum;
while(k<l-1 && w[k].line==w[k+1].line)
{
for(; j<max; j++) putchar(' ');
printf("%c",w[k++].c);
j++;
max=w[k].colum;
}
for(; j<max; j++) putchar(' '); printf("%c\n",w[k++].c);
}
}
return 0;
}
这题有一个细节要注意
using namespace std;
string strs;
int pos[100];
void solve()
{
int ll=strs.length();
int now=0,amax=-200,amin=300;
pos[0]=now;
amax=max(amax,now);amin=min(amin,now);
for(int i=1;istrs[i-1]) now++;
amax=max(amax,now);amin=min(amin,now);
pos[i]=now;
}
for(int i=amax;i>=amin;i–)
{
int mostright=-1;
for(int j=0;j<ll;j++)
if(pos[j]==i) mostright=j;
for(int j=0;j<=mostright;j++)
if(pos[j]==i) cout<<strs[j];
else cout<<' ';
cout<<endl;
}
}
int main()
{
while(cin>>strs) solve();
return 0;
}
每一行一旦字符输出完了,之后的空格都不能输出。
注意看程序里mostright那一段
我都是用‘0’来代替空格的说………………