poj 2136 打印字母的树状图

来源:互联网 发布:阿里云ubuntu中文乱码 编辑:程序博客网 时间:2024/05/29 10:42

水一发。注意每列中间有空格,每行末无空格。

还有另一个需要注意的地方:如下这段代码

if(s[i]>='A' && s[i]<='Z'){                num[s[i]-'A']++;                res = max(res,num[s[i]-'A']);            }
如果写成

if(s[i]>='A' && s[i]<='Z')        res = max(res,++num[s[i]-'A']);
那么会出现错误。原因在于max的宏定义。因为max的定义采用三目运算符,所以在res更新的时候,++运算会执行两次,导致错误。以后要注意在宏定义中要少用表达式或者函数调用。

#include <stdio.h>#include <string.H>#define N 100#define max(a,b) ((a)>(b)?(a):(b))char s[N];int num[27];int main(){    int i,j,res=0;    memset(num,0,sizeof(num));    for(j = 0;j<4;j++){        gets(s);        for(i = 0;s[i]!='\0';i++)            if(s[i]>='A' && s[i]<='Z'){                num[s[i]-'A']++;                res = max(res,num[s[i]-'A']);            }    }    for(i = res;i>=1;i--){        for(j = 0;j<26;j++){            if(num[j] >= i)                putchar('*');            else                putchar(' ');            if(j<25)                putchar(' ');        }        putchar('\n');    }    for(j = 0;j<26;j++){        putchar('A'+j);        if(j<25)            putchar(' ');    }    putchar('\n');    return 0;}


0 0
原创粉丝点击