| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 522 人关注过本帖
标题:这类题型,很直观,,求思路,求解析~~~
只看楼主 加入收藏
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:6 
这类题型,很直观,,求思路,求解析~~~
用直方图表示字符中每个字母出现的次数。(忽略大小写字母)
   例输入:Intel's chips have been running hotter.
   显示A  B  C  E  G  H  I  L  N  O  P  R  S  T  U  V
                |              |
                |              |
                |     |  |     |                 |
                |     |  |     |           |  |  |
       |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  
搜索更多相关主题的帖子: 直方图 running 
2011-06-15 22:58
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
倒过来方便

—>〉Sun〈<—
2011-06-15 23:03
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
关注。。。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-15 23:12
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:0 
存在二维数组里~从下往上存
2011-06-15 23:17
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:7 
程序代码:
/* cosdos 2011-06-15 */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // for tolower()

#define ALPHA_COUNT 26

void print(int *ar)
{

    int i, line;
    // 计算行数,并打印列标题。
    for (line=i=0; i < ALPHA_COUNT; ++i) {
        if (ar[i]) {
            printf("%c ", toupper('a'+i));
            line = (ar[i]>line ? ar[i] : line);
        }

    }
    putchar('\n');
    // 根据行数和字母数量打印列。
    for (line; line >= 1; --line) {
        for (i=0; i < ALPHA_COUNT; ++i) {
            if (ar[i]>0) {
                printf("%c ", (ar[i]>=line ? '|' : ' ') );
            }
        }
        putchar('\n');
    }
}

int main(void)
{
    int i, ch;
    int alpar[ALPHA_COUNT]={0};
    
    while ('\n' != (ch=getchar()) && EOF != ch) {
        if (isalpha(ch)) {
            ++alpar[ tolower(ch) - 'a' ];
            //printf("%c:%d ", toupper(ch), alpar[tolower(ch) - 'a']);
        }
    }
    
    print(alpar);
    system("pause");
    return 0;
}


[ 本帖最后由 cosdos 于 2011-6-15 23:39 编辑 ]

—>〉Sun〈<—
2011-06-15 23:36
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
'.' 柱最高的高度 == 最多的那个字母的数量
.'. 柱最高的高度 - 某字母的数量 == 该字母柱的高度

[ 本帖最后由 cosdos 于 2011-6-15 23:43 编辑 ]

—>〉Sun〈<—
2011-06-15 23:42
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <ctype.h>
#define STR_FRE_LENGTH 51
#define CHAR_LENGTH 26

#define set1(index, array)  \
                array |= 1 << index;
#define set0(index, array)  \
                array &= ~(1 << index);

typedef struct {
    unsigned times;
    char value;
} Character;

int get(int index, unsigned value) {
    return (value & (1 << index)) >> index;
}

void init_characters(Character * chars) {
    int i;
    for(i = 0; i < CHAR_LENGTH; i++) {
        chars[i].times = 0;
        chars[i].value = i + 'a';
    }
}

int max_times(Character * chars) {
    int i, max = chars[0].times;
    for(i = 1; i < CHAR_LENGTH; i++)
        max < chars[i].times && (max = chars[i].times);
    return max;
}

void addition(Character * chars, char ch) {
    if(islower(ch))
        chars[ch - 'a'].times++;
    else if(isupper(ch))
        chars[ch - 'A'].times++;
}

int main(void) {
    int i, j, k, max;
    char str[STR_FRE_LENGTH], * p = str;
    unsigned fre[STR_FRE_LENGTH - 1] = {0};
    Character chars[CHAR_LENGTH];

    init_characters(chars);
    gets(str);
    while(*p)
        addition(chars, *p++);
    max = max_times(chars);
    for(i = 0; i < CHAR_LENGTH; i++)
        chars[i].times && printf("%-2c", chars[i].value);
    printf("\n");
    for(i = max, k = 0; i > 0; i--, k++)
        for(j = 0; j < CHAR_LENGTH; j++)
            if(chars[j].times >= i)
                set1(j, fre[k]);
    for(i = 0; i < max; i++) {
        for(j = 0; j < CHAR_LENGTH; j++) {
            get(j, fre[i]) && printf("%-2c", '|');
            !get(j, fre[i]) && chars[j].times && printf("%-2c", ' ');
        }
        printf("\n");
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册



My life is brilliant
2011-06-16 09:46
快速回复:这类题型,很直观,,求思路,求解析~~~
数据加载中...
 
   



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

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