标题:算法问题,高手请进
只看楼主
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
结帖率:64.29%
已结贴  问题点数:20 回复次数:5 
算法问题,高手请进
描述
输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数。注意:只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数。
输入
输入包括4行由大写字母组成的文本,每行上字符的数目不超过80个。
输出
输出包括若干行。其中最后一行给出26个大写英文字母,这些字母之间用空格隔开。前面的几行包括空格和星号,每个字母出现几次,就在这个字母的上方输出一个星号。注意:输出的第一行不能是空行。
样例输入
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
样例输出
                            *
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
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

这是本人写的代码,虽然在vc++上仿佛可以运行的,但就能AC,又找不到原因,求高手指点一二。万分感激。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

void f(int *data, int max){
for(int i = max; i > 0; i --){//输出*和空白字符
for(int j = 0; j < 26; j++){
   if(data[j] >= i)
     cout<<'*'<<' ';
   else
     cout<<' '<<' ';
}
cout<<endl;
}
for(int t = 0; t < 26; t++){//输出26字母
   printf("%c",(65+t));
   cout<<' ';
}
}

int main()
{
   char c;
   int data[26]= {0};//统计字母出现的次数
   int MAX = 0;//最多字母的出现的次数
   for(int i = 0; i < 4; i++){//输入4行字符
   while((c=getchar()) != '\n')
     if(c >= 65 && c <= 90 )
        if(++data[c - 65] > MAX)
        MAX = data[c - 65];
   }
   f(data, MAX);//输出
   system("pause");
return 0;
}

搜索更多相关主题的帖子: 英文字母 标点符号 直方图 
2012-11-08 19:01
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
得分:0 
说错了。。是不能AC
2012-11-08 19:58
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
得分:20 
求网站,我试试。

编程之路定要走完……
2012-11-08 20:58
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
得分:0 
回复 3楼 C_戴忠意
http://sxu.
2012-11-08 21:46
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

#define N 80
#define M 26

int max_length(int *p)
{
    int i,max;
    for(i=1,max=p[0];i<M;i++)
        if(p[i]>max)
            max=p[i];
    return max;
}

void space()    { printf(" "); }

void output()    { printf("*"); }

int main()
{
    char str[N];
    int i,j,len;
    int abc[M];
    for(i=0;i<M;i++) abc[i]=0;
    for(i=0;i<4;i++)
    {
        gets(str);
        len=strlen(str);
        for(j=0;j<len;j++)   
            if(str[j]>='A'&&str[j]<='Z')
                abc[str[j]-'A']++;   
    }
    //for(i=0;i<M;i++) printf("%d ",abc[i]);
    len=max_length(abc);
    //printf("%d\n",len);
    for(i=len;i>0;i--)
    {
        for(j=0;j<M;j++)
        {
            if(abc[j]==i)    {abc[j]--;output();}
            else    space();
            if(j!=M-1)    space();
        }
        printf("\n");
    }
    for(i=0;i<M;i++)
    {
        printf("%c",i+'A');
        if(i!=M-1)    space();
    }
    printf("\n");
    return 0;
}

编程之路定要走完……
2012-11-09 06:58
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
得分:0 
回复 5楼 C_戴忠意
我有个疑问能帮我麻烦解决一下。我把代码做如下修改,怎么就有问题呢?
程序代码:
#include <stdio.h>
#include <string.h>

#define N 80
#define M 26

/*int max_length(int *p)
{
    int i,max;
    for(i=1,max=p[0];i<M;i++)
        if(p[i]>max)
            max=p[i];
    return max;
}*/

void space()    { printf(" "); }

void output()    { printf("*"); }

int main()
{
    char str[N];
    int i,j;
    int abc[M] = {0};
    int len = 0;
    //for(i=0;i<M;i++) abc[i]=0;
    for(i=0;i<4;i++)
    {
        gets(str);
        len=strlen(str);
        for(j=0;j<len;j++)  
            if(str[j]>='A'&&str[j]<='Z'){
              ++abc[str[j]-'A'];  //此处修改
              if(len < abc[str[j] - 'A'])
                len = abc[str[j] - 'A'];
            }
    }
    //for(i=0;i<M;i++) printf("%d ",abc[i]);
    //len=max_length(abc);
    //printf("%d\n",len);
    for(i=len;i>0;i--)
    {
        for(j=0;j<M;j++)
        {
            if(abc[j] >= i)    {output();}
            else    space();
            if(j!=M-1)    space();
        }
        printf("\n");
    }
    for(i=0;i<M;i++)
    {
        printf("%c",i+'A');
        if(i!=M-1)    space();
    }
    printf("\n");
    return 0;
}
2012-11-09 14:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-386451-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.141972 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved