问题描述:
给定下列除式,其中包含5个7,其他打X的是任意数字,请加以还原。
X 7 X ————-商
―――――――――――――――――――――
除数—– X X √ X X X X X ———-被除数
x 7 7
—————-
X 7 X
X 7 X
—————-
X X
X X
—————-
0
这个程序我没有什么好的思路,所以也不会写,能把示例代码看懂就行了!
示例代码:
def findHead(): for x in xrange(10, 100): for y in xrange(1, 10): if str(x * y)[1:] == '77' and str(x * 7)[1] == '7': return x, y, x*y, x*7 def findTail(x): for y in xrange(1, 10): if x*y < 100: return y, x*y def main(): chu, shang1, ji1, ji2 = findHead() shang3, ji3 = findTail(chu) res = ji3 + ji2 * 10 + ji1 * 100 return res, chu, int(str(shang1)+'7'+str(shang3)) print main()
代码分析:
首先根据除式已知:
1、被除数的范围是10000到99999,除数的范围是10到100,且可以整除;
2、商为100到1000之间的数,且十位数字为7;
3、商的第一位乘以除数是个三位数,且后两位为77;
4、被除数的第三位一定为4;
5、7乘以除数是一个三位数,且第二位为7,对应第二个X7X;
6、商的最后一位不能为0,且与除数的积是一个二位数;
对于findHead函数,for循环中的x是除数,y是商的第一个数,那么可以判断如果x*y(也就是X77)的后两位数等于77并且x*7(也就是第二个X7X)的第二个数等于7,那么就返回除数x,商的第一个数y,第一个积x*y和第二个积x*7;
对于findTail函数,传入根据findHead函数返回的除数x,因为商的第三个数y是介于1到10的,所以,如果x*y(也就是XX)小于100,那么就返回商的第三个数y和第三个积x*y;
最后,由于已知了第一个积X77,第二个积X7X和第三个积XX,那么就可以通过 积3+积2*10+积1*100来得到被除数,除数不用算就是上面的x,商的值(字符串化)就是findGead中的y加上已知的7加上findTail中的y;
结果:
E:\python\python.exe D:/pycharm/python/奇猫百题/除式还原.py
(51463, 53, 971)
可以根据答案带入尝试!
题目出处:http://www.cheemoedu.com/exercise/56
转载于:https://my.oschina.net/jmbzs/blog/711965
今天的文章除式还原分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/59841.html