牛客网华为机试题说明七

一.  牛客网之华为机试题

21.  简单密码

描述
现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.
而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。
数字和其它的符号都不做变换。
数据范围: 输入的字符串长度满足 1≤n≤100 1≤n≤100 

输入描述:输入一组密码,长度不超过100个字符。
输出描述:输出密码变换后的字符串

示例1
输入:YUANzhi1987
输出:zvbo9441987

代码实现思路:

首先,处理小写字母。

其次,处理大写字母,其中,大写字母 'Z' 需要进行特殊处理。

代码实现如下:

#include <stdio.h>
#include <string.h>

int main(void) 
{
    char a[100] = {0};
    int i = 0;
    int len = 0;

    scanf("%s", a);
    len = strlen(a);

    for(i = 0; i<len; i++)
    {
        //如果是小写字母
        if(a[i] >= 'a' && a[i] <= 'c')
            a[i] = '2';
        else if(a[i]>= 'd' && a[i]<='f')
            a[i] = '3';
        else if(a[i]>='g' && a[i]<='i')
            a[i] = '4';
        else if(a[i]>='j' && a[i]<='l')
            a[i] = '5';
        else if(a[i]>='m' && a[i]<='o')
            a[i] = '6';
        else if(a[i]>='p' && a[i]<='s')
            a[i] = '7';
        else if(a[i]>='t' && a[i]<='v')
            a[i] = '8';
        else if(a[i]>='w' && a[i]<='z')
            a[i] = '9';
        //如果是大写字母
        if(a[i]>='A' && a[i]<='Z')
        {
            if(a[i]=='Z')  //大写字母特殊处理
            {
                a[i] = 'a';
            }
            else{
                a[i] +=32;
                a[i] +=1;
            }
        }
    }
    printf("%s", a);

    return 0;
}

HJ22.c: 汽水瓶

描述
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足 1≤n≤100 1≤n≤100 

注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。
输入描述:
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1
输入:
3
10
81
0

输出:
1
5
40
说明:
样例 1 解释:用三个空瓶换一瓶汽水,剩一个空瓶无法继续交换
样例 2 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一个空瓶再用三个空瓶换一瓶汽水喝完得一个空瓶还给老板    

代码实现如下:

#include <stdio.h>

int main(void) 
{
    int n = 0;
    int out = 0;

    while(scanf("%d", &n) != EOF)
    {
        if(n == 0)
            break;
        if(n == 1)
            out = 0;
        if(n >= 2)
        {
            out = n/2;
        }
        printf("%d\n", out);
    }

    return 0;
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值