baidu c++吧上的一道题
时间:2011-01-16 来源:李sir
Input:
sadjhasdhqwpopeepomcxnnbladkjkfjasjas
Output:
@
@ @ @
@ @ @ @ @
@ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
a b c d e f g h i j k l m n o p q r s t u v w x y z
注意:
在字符串中每个小写字母的个数不会超过20个.
编程语言:C/C++.
_________________________________________________
题目意思就是每个字母有多少个,上面就输出多少@。我用一个长度为26的数组(数组int count[26])来保存每个字母的个数,然后用一个26*20(因为说了每个字母个数都不超过20个)的数组(数组chars)来记录最后输出的结果,这个数组中的刚开始初始化为空字符,每次碰到一个字母就将其赋值为@,最后只要把这个数组从最高的一排向下输出就得到结果了,但是上面好多排都可能是空字符,要从第一排含有至少一个非空字符(即@)的向下输出,所以我用了一个变量(int max_count)来记录这一排的位置。程序如下:
using namespace std;
#define COUNT 20
void output(char *p)
{
char chars[26][COUNT];
for(int i=0;i<26;i++)
for(int j=0;j<COUNT;j++)
chars[i][j]=' ';
int count[26];
for(int i=0;i<26;i++)
count[i]=0;
int max_count=0;
int index=0;
int tmp=0;
while(*p!='\0')
{
index=*p-'a';
tmp=++count[index];
if(max_count<tmp)
max_count=tmp;
chars[index][tmp-1]='@';
p++;
}
for(int i=max_count-1;i>=0;i--)
{
for(int j=0;j<26;j++)
cout<<chars[j][i];
cout<<endl;
}
for(char i='a';i<='z';i++)
cout<<i;
}
int main()
{
char *str="sadjhasdhqwpopeepomcxnnbladkjkfjasjas",*p=str;
output(p);
getchar();
return 0;
}
相关阅读 更多 +