acm训练 2017 02 22

训练一: 零起点学算法72——首字母变大写
Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
思路: 用ascll变化 例如A的码值为65 a的码值为97 只需将需要变化的字符强制转换为整数再减32,就能化小写为大写
测试代码一:

#include
#include
#include
/*
Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
*/
int main()
{
    char *str = calloc(100, sizeof(char));
    while (gets(str) != NULL)
    {
        if (*str != ' ') printf("%c",(int)*str - 32);
        int i,cnt=strlen(str);
        for (i = 1; i < cnt; i++)
            if (*(str + i-1) == ' ' && *(str + i ) != ' ') printf("%c", (int)*(str + i) - 32);
            else printf("%c", *(str + i));
        printf("\n");
    }
    return 0;
}

运行结果:
acm训练 2017 02 22_第1张图片
测试结果:通过 Accepted!
训练二:1166: 零起点学算法73——统计元音
Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串,只由小写字母组成。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1

a:2
e:1
i:3
o:0
u:1
测试代码一:

#include
#include
/*
Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串,只由小写字母组成。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1

a:2
e:1
i:3
o:0
u:1
*/
#define area 100 //字符长度范围
int fun_wt(char b); //判断该字符是空格,字母,数字还是其他字符  1:a 2:e 3:i 4:o 5:u  6:其他数
int main()
{
    char str[area];
    int n;
    scanf("%d", &n);
    getchar();
    while (n--)
    {
        gets(str);
        int a = 0;
        int i;
        int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;//k为空格计数器s为数字计数器z作为字母计数器q作为其他字符的计数器
        int rlen = strlen(str); //测出字符串的实际长度
        for (i = 0; i < rlen; i++)
        {
            if (fun_wt(str[i]) == 1) num1++;
            else if (fun_wt(str[i]) == 2) num2++;
            else if (fun_wt(str[i]) == 3) num3++;
            else if (fun_wt(str[i]) == 4) num4++;
            else if (fun_wt(str[i]) == 5) num5++;
        }
        printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n", num1, num2, num3, num4, num5);
    }
    return 0;
}
int fun_wt(char b)
{
    int a;
    if (b == 'a') a = 1;
    else if (b == 'e') a = 2;
    else if (b == 'i') a = 3;
    else if (b == 'o')a = 4;
    else if (b == 'u') a = 5;
    else a = 6;
    return a;
}

运行结果:
acm训练 2017 02 22_第2张图片
测试结果: 格式错误
分析: 格式控制一定要注意这个要求—多个测试实例之间由一个空行隔开。
测试代码二:

#include
#include
#define area 100 //字符长度范围
int fun_wt(char b); //判断该字符是空格,字母,数字还是其他字符  1:a 2:e 3:i 4:o 5:u  6:其他数
int main()
{
    char str[area];
    int n;
    scanf("%d", &n);
    getchar();
    while (n--)
    {
        gets(str);
        int a = 0;
        int i;
        int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;//k为空格计数器s为数字计数器z作为字母计数器q作为其他字符的计数器
        int rlen = strlen(str); //测出字符串的实际长度
        for (i = 0; i < rlen; i++)
        {
            if (fun_wt(str[i]) == 1) num1++;
            else if (fun_wt(str[i]) == 2) num2++;
            else if (fun_wt(str[i]) == 3) num3++;
            else if (fun_wt(str[i]) == 4) num4++;
            else if (fun_wt(str[i]) == 5) num5++;
        }
        printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n", num1, num2, num3, num4, num5);
        printf("\n"); //格式控制!!
    }
    return 0;
}
int fun_wt(char b)
{
    int a;
    if (b == 'a') a = 1;
    else if (b == 'e') a = 2;
    else if (b == 'i') a = 3;
    else if (b == 'o')a = 4;
    else if (b == 'u') a = 5;
    else a = 6;
    return a;
}

运行结果:
acm训练 2017 02 22_第3张图片
测试结果: 通过! Accepted!!
练习三: 零起点学算法79——统计单词个数
Description
输入一行字符(少于300个字符),以回车结束,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
—–Input
输入一字符串,以回车结束。
—–Output
输出该字符串中单词的个数
—–Sample Input
This is a c program.
—– Sample Output
5
测试代码一:

#include
#include
#include
/*
Description
输入一行字符(少于300个字符),以回车结束,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
Input
输入一字符串,以回车结束。
Output
输出该字符串中单词的个数
Sample Input
This is  a     c    program.
Sample Output
5
*/
int main()
{
    char *str = calloc(300, sizeof(char));
    while (gets(str) != NULL)
    {
        int number = 0;
        if (*str != ' ') number++;
        int i, cnt = strlen(str);
        for (i = 1; i < cnt; i++)
            if (*(str + i - 1) == ' ' && *(str + i) != ' ') number++;
        printf("%d\n", number);
    }
    return 0;
}

运行结果:
acm训练 2017 02 22_第4张图片
测试结果:Accepted

你可能感兴趣的:(C语言acm训练)