肇事车辆

问题描述:

有一个卡车司机肇事后想逃跑,但是被三个人看见了其车牌号,但是都没看全,甲说:车牌的前两位是一样的;乙说:车牌的后两位一样的,但与前两位不一样;丙说:车牌是一个数字的平方。
请编写一个程序计算该车牌号是多少(车牌号4位数)。


我的代码:

import math
for i in range(0,10):
    for j in range(0,10):
        s=i*1000+i*100+j*10+j
        if i!=j and math.sqrt(s).is_integer():
            print s


结果:

7744


我的思路:代码很好懂,也容易想到思路,关键的地方在于如何判断车牌是否为一个数的平方,当时想到了两种方法:一是直接判断,因为最小的车牌号为0011,最大的车牌号为9988。那么平方根范围就是在3到100之间,但是有个问题,使用math函数开平方后显示的要么是xx.0这种浮点整数类型值,要么是xx.xxx这种浮点类型值,根本不会在范围内,那么只有第二个方法了,那就是判断开平方后的数是否为浮点型整数类型的数,这就好办了,只需要一个is_integer()函数就行了;


示例代码:

import math
def FindHim():
    for x in xrange(10):
        for y in xrange(10):
       if x != y:
      result = x * 1100 + y * 11    
      test = math.sqrt(result)
      if test.is_integer():
          return result
print FindHim()


总结:

判断浮点型整数(如10.0)的方法

1.is_integer()函数

如果浮点实例是有限的整数型值则返回True,否则返回False

参考文档:https://docs.python.org/2/library/stdtypes.html#additional-methods-on-float

例如:

>>> 1.5.is_integer()
False
>>> 1.0.is_integer()
True
>>> 1.414213234.is_integer()
False

2.也可以使用round函数

语法格式:

round(number[, ndigits])

将number的小数点四舍五入到ndigits个数字,默认ndigits为0,返回的结果为浮点类型;

>>> def verfiy(num):
	return ('float', 'int')[round(num) == float(num)]

>>> verfiy(10)
'int'
>>> verfiy(10.0)
'int'
>>> verfiy(10.01)
'float'

好吧,虽然例子看起来不恰当,但也是一种解决办法,不过看来is_integer函数还是最简单的呀!


题目地址:http://www.cheemoedu.com/exercise/8

转载于:https://my.oschina.net/jmbzs/blog/711985

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C语言编写的解答: ```c #include <stdio.h> #include <math.h> int main() { int i, j, k, l, num; for (i = 0; i <= 9; i++) { for (j = 0; j <= 9; j++) { for (k = 0; k <= 9; k++) { for (l = 0; l <= 9; l++) { num = i * 1000 + j * 100 + k * 10 + l; if (j == 3 && k == 1 && l >= 0 && l <= 9) { int square = l * 10 + l; if (square == i || square == j || square == k || square == l) { printf("肇事车辆号码为:%d%d%d%d。\n", i, j, k, l); return 0; } } if (j == 3 && k == 1 && l >= 0 && l <= 9 && (i == j || j == k || k == l)) { printf("肇事车辆号码为:%d%d%d%d。\n", i, j, k, l); return 0; } if (i == j && j == k && k != l) { printf("肇事车辆号码为:%d%d%d%d。\n", i, j, k, l); return 0; } } } } } return 0; } ``` 解释: 首先,我们使用四层循环来枚举所有的四位数,表示可能的车牌号码。 然后,我们分别对每个目击者提供的线索进行判断。 如果甲说牌照的三、四位相同,那么我们就不需要判断了,因为这在循环枚举时已经考虑到了。 如果乙说牌号为31****,那么我们就需要判断百位是3,十位是1,个位是0~9之间的数。 如果丙说牌照的五、六位相同,那么我们就只需要判断万位、千位、百位和第五、六位是否相同。 如果丁说三~六位是一个整数的平方,那么我们就判断第三、四、五、六位是否组成了一个平方数,并且这个平方数的每一位是否与车牌号码中的数字相同。 最后,如果都没有找到肇事车辆的号码,就输出没有找到的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值