一. 牛客网之华为机试题
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;
}