问题描述
(1)给定一个数组,你需要删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度和新的数组。
输入样例:[1,1,1,2,3,4,4,4]
输出样式:4 [1,2,3,4]
(2)马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如:ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
解决方案
(1)首先这是一个数组并且需要返回列表所以要将字符串转化为数,其次需要删除重复的数,最后要输出长度。
(2)首先abcde是1~9不同的数字,且满足ab*cde=adb*ce,一共有多少种情况。
(3)用list()转化为列表,set()转化为不重复的集合,eval()把字符转化为数,len()计算该列表的长度。下表是最简单的做法。
L=list(set(eval(input()))) print(len(L),L) |
表 1
(4)首先要用for循环来循环abcde的值,然后再用if语句来判定条件,再将符合条件的abcde加起来就是最后符合条件的数的个数了。
x=0 for a in range(1,10): for b in range(1,10): for c in range(1,10): for d in range(1,10): for e in range(1,10): if a!=b and a!=c and a!=d and a!=e and b!=c and b!=d and b!=e and c!=d and c!=e and d!=e and(a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e): x+=1 #x=x+1 print(x) |
表 2
结语
需要熟悉一些列表的基本性质如:插入,删去,索引。要通过这些代码来完成。set()转化为不重复的集合,eval()把字符转化为数,len()计算该列表的长度。是第一题的解题关键。要熟悉for循环和if语句,需要注意这些语句的最后都需要“:”来结束。在使用for语句的时候一定要注意范围,if语句的时候要注意条件是否输入正确是否有遗漏。