华为机试在线训练–牛客网(python)

第四部分(31~40)

第三十一题:[中级]单词倒排

题目描述
对字符串中的所有单词进行倒排。
说明:
1、每个单词是以26个大写或小写英文字母构成;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序
示例1
输入

I am a student
输出

student a am I

while True:try:out_arr = []in_arr = raw_input()for i in in_arr:if not i.isalpha():in_arr = in_arr.replace(i,' ')for j in in_arr.split():out_arr.append(j)print " ".join(out_arr[::-1])except:break

replace是一次性替换所有同样的非字母字符;注意 in_arr.split() 和 in_arr.split(’ ‘) 的区别;列表倒序赋给字符串。
对于这道题前者针对连续多个空格的处理情况是做单个保留,后者是全部都保留。不符合此题意。是本题易错点。

第三十二题:字符串运用-密码截取

题目描述
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

输入描述:
输入一个字符串
输出描述:
返回有效密码串的最大长度
示例1
输入
ABBA
输出
4

def deal(s):length=1for i in range(1,len(s)-1):j=1while i-j>=0 and i+j<len(s) and s[i-j]==s[i+j]:j+=1if 2*j-1>length:length=2*j-1j=0while i-j-1>=0 and i+j<len(s) and s[i-j-1]==s[i+j]:j+=1if 2*j>length:length=2*jreturn length
while True:try:s=raw_input()print deal(s)except:break

注意:针对两种情况,奇对称j=1和偶对称j=0;

第三十三题:整数与IP地址间的转换

题目描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。
举例:一个ip地址为10.0.3.193

每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

IP地址的每段可以看成是一个0-255的整数,需要对IP地址进行校验

输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
示例1
输入

10.0.3.193
167969729
输出

167773121
10.3.3.193

def encode(str0):li = map(int, str0.split('.'))str1 = ''for s in li:s1 = bin(s)[2:].zfill(8)#delete 0b and add zerostr1 += s1int0 = int(str1,2)return int0
def decode(int0):bin0 = bin(int0)[2:]n = len(bin0) / 8length = 8 * (n + 1)bin1 = bin0.zfill(length)if len(bin0)%8 != 0:m = 0else:m = 1li = []for i in range(m, n + 1):s = bin1[8*i : 8*i+8]int1 = int(s,2)li.append(str(int1))str1 = '.'.join(li)return str1
while True:try:ip1 = str(raw_input())ip2 = int(raw_input())print encode(ip1)print decode(ip2)except:break

注意:字符串的补零操作,对齐操作。

第三十四题:图片整理

题目描述
Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。

输入描述:
Lily使用的图片包括”A”到”Z”、”a”到”z”、”0”到”9”。输入字母或数字个数不超过1024。
输出描述:
Lily的所有图片按照从小到大的顺序输出
示例1
输入

Ihave1nose2hands10fingers

输出

0112Iaadeeefghhinnnorsssv

while True:try:picture = raw_input()li = list(picture)li.sort()print ''.join(li)except:break

注意:这里的排序用sort()函数即可。

第三十五题:蛇形矩阵

题目描述
题目说明
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。

样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

输入描述:
输入正整数N(N不大于100)
输出描述:
输出一个N行的蛇形矩阵。
示例1
输入
4
输出
1 3 6 10
2 5 9
4 8
7

try:while True:num = int(raw_input())L = [[0 for i in range(0)] for j in range(num)]insert = 1;for i in range(num):for j in range(i+1):L[i-j].append(str(insert))insert=insert+1for i in range(num):print ' '.join(L[i])
except:pass

注意:try和while的位置会影响运行时间;i代表行数,L[0]为第一行;join函数会自动换行。

第三十六题:字符串加密

题目描述
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词属于字母表的下面,如下所示:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。
请实现下述接口,通过指定的密匙和明文得到密文。
详细描述:
接口说明
原型:
voidencrypt(char * key,char * data,char * encrypt);
输入参数:
char * key:密匙
char * data:明文
输出参数:
char * encrypt:密文
返回值:
void

输入描述:
先输入key和要加密的字符串
输出描述:
返回加密后的字符串
示例1
输入
nihao
ni
输出
le

while True:try:key_arr , in_arr = raw_input() , raw_input()CodeBook = []res = ''for i in key_arr:if i not in CodeBook:CodeBook.append(i)for j in range(97,123):if chr(j) not in CodeBook:CodeBook.append(chr(j))for m in in_arr:if 65 <= ord(m) <= 90:res += CodeBook[ord(m)-65]elif 97 <= ord(m) <= 122:res += CodeBook[ord(m)-97]print resexcept:break

注意:chr()函数十进制转ASCII码,ord()函数是ASCII转十进制数字。

第三十七题:统计每个月兔子的总数

题目描述
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
输入描述:
输入int型表示month
输出描述:
输出兔子总数int型
示例1
输入
9
输出
34

while True:try:month=int(raw_input())if month<3:print 1else:a=1b=1for i in range(3,month+1):a,b=b,a+bprint bexcept:break

注意:第n个月的兔子总数an=an-1 + an-2;a,b=b,a+b的写法可以省去中间变量,高效。

第三十八题:求小球落地5次后所经历的路程和第5次反弹的高度

题目描述
假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?
输入描述:
输入起始高度,int型
输出描述:
分别输出第5次落地时,共经过多少米第5次反弹多高
示例1
输入
1
输出
2.875
0.03125

while True:try:a = int(raw_input())b = 2*2*a*(1-(0.5)**5)-aprint bprint a*(0.5)**5except:break

直接用公式做

第三十九题:判断两个IP是否属于同一子网

题目描述
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
示例:
I P 地址  192.168.0.1
子网掩码  255.255.255.0
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
AND运算
    11000000.10101000.00000000.00000000
转化为十进制后为:
    192.168.0.0
I P 地址  192.168.0.254
子网掩码  255.255.255.0
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.11111110
子网掩码 11111111.11111111.11111111.00000000
AND运算
     11010000.10101000.00000000.00000000
转化为十进制后为:
     192.168.0.0
通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。
/*
* 功能: 判断两台计算机IP地址是同一子网络。
* 输入参数: String Mask: 子网掩码,格式:“255.255.255.0”;
* String ip1: 计算机1的IP地址,格式:“192.168.0.254”;
* String ip2: 计算机2的IP地址,格式:“192.168.0.1”;
*
* 返回值: 0:IP1与IP2属于同一子网络; 1:IP地址或子网掩码格式非法; 2:IP1与IP2不属于同一子网络
*/
public int checkNetSegment(String mask, String ip1, String ip2)
{
/在这里实现功能/
return 0;
}
输入描述:
输入子网掩码、两个ip地址
输出描述:
得到计算结果
示例1
输入
255.255.255.0 192.168.224.256 192.168.10.4
输出
1

import sys
def fun(ss1,ss2,ss3):ss1=ss1.split('.')ss2=ss2.split('.')ss3=ss3.split('.')def fun2(ss):sss=''if len(ss)<4:for i in range(4-len(ss)):ss.append('0')for i in range(4):a=str(bin(int(ss[i])))[2:]lena=len(a)a='0'*(8-lena)+asss+=areturn sssss1=fun2(ss1)ss2=fun2(ss2)ss3=fun2(ss3)return int(ss1)&int(ss2)==int(ss1)&int(ss3)
if __name__=="__main__":try:while True:line= sys.stdin.readline().strip()if line == '':breakline2= sys.stdin.readline().strip()line3= sys.stdin.readline().strip()if len(line.split('.')) < 4:print 1else:result=fun(line,line2,line3)if result==True:print 0if result==False:print 2except:pass

第四十题:输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数

题目描述
输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数。
输入描述:
输入一行字符串,可以有空格
输出描述:
统计其中英文字符,空格字符,数字字符,其他字符的个数
示例1
输入
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\/;p0-=\][
输出
26
3
10
12

while True:try:inputstr = raw_input()zimu = 0kongge = 0shuzi = 0qita = 0for i in inputstr:if 'a'<=i<='z' or 'A'<=i<='Z':zimu += 1elif '0'<=i<='9':shuzi += 1elif i == ' ':kongge += 1else:qita += 1print zimuprint konggeprint shuziprint qitaexcept:break

华为机试在线训练--牛客网(python)第四部分相关推荐

  1. 华为机试在线训练-牛客网(20)【中级】字符串运用-密码截取

    题目描述 Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如 ...

  2. 华为机试在线训练-牛客网(15)数据分类处理

    题目描述 信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码.QQ用户.手机号码.银行帐号等信息及活动记录. 采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出. 输入描述: ...

  3. 牛客网华为机试考试java_牛客网——华为机试(题17:坐标移动)(Java)

    题目描述: 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动.从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面. 输入: ...

  4. 牛客网--华为机试在线训练10:字符个数统计

    牛客网–华为机试在线训练10:字符个数统计 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在A ...

  5. 牛客网–华为机试在线训练9:提取不重复的数

    牛客网–华为机试在线训练9:提取不重复的数 题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺 ...

  6. 牛客网–华为机试在线训练8:合并表记录

    牛客网–华为机试在线训练8:合并表记录 题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个 ...

  7. 牛客网–华为机试在线训练7:取近似值

    牛客网–华为机试在线训练7:取近似值 题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述: 输入一个正浮点数值 输 ...

  8. 牛客网–华为机试在线训练6:质数因子

    牛客网–华为机试在线训练6:质数因子 题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 最后一个数后面也要有空格 详细描述: 函数接 ...

  9. 牛客网–华为机试在线训练5:进制转换

    牛客网–华为机试在线训练5:进制转换 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该 ...

最新文章

  1. 成为软件高手的几个忌讳
  2. 【转】8 个用于业余项目的优秀 Python 库
  3. C++之‘malloc’ was not declared in this scope和invalid conversion from ‘void*’ to ‘char*’
  4. testng.xml文件配置
  5. fastdfs-01-了解
  6. 实战 | Java 流之Stream,Lambda以及日期
  7. 描述java泛型引入原则_Java/泛型的类型擦除/README.md · oslo/LearningNotes - Gitee.com
  8. NYOJ--22--素数求和问题
  9. matlab解方程组解析解
  10. DTI脑网络构建 详细介绍处理过程以及PANDA的使用
  11. HTML特效推荐,超级惊艳 10款HTML5动画特效推荐[转]
  12. 风投 红杉资本 Sequoia Capital
  13. unity2D横版游戏教程8-音效
  14. java游戏oppo飞鹰计划,高德发布打假平台“飞鹰计划”,首批接入200多个品牌
  15. 「AHOI / HNOI2017」影魔
  16. 得年轻人者得天下,新闻客户端如何抓住不看报纸的90后?
  17. CH-90Na螯合树脂技术在废水除镍、除总铬、除重上的应用
  18. ubuntu18.04彻底卸载fcitx
  19. win10桌面显示未激活
  20. 川大研究生计算机网络挂科,川大这28名研究生被退学处理!

热门文章

  1. 集成学习5-Xgboost原理与调参
  2. 深耕网络安全的奇安信,如何在DT时代铸下安全印记?
  3. 全连接神经网络实现MNIST手写数字识别
  4. dedecms实现关键字自动加内链
  5. u盘提示:文件或目录损坏且无法读取 修复
  6. php eth erc20,【Ethereum】以太坊ERC20 Token标准完整说明
  7. 使用自动编码器(Autoencoder)及其变体进行特征学习
  8. HDMI切换器HDMI 延长放大器AG7111|AG7210|A7120|AG7220|AG7231
  9. 培训班的同学,拜托不要把用人单位想得那么傻,好不好?! 自由飞
  10. 11 python 安装scikits.audiolab记录