初级系列4.抓交通肇事犯问题
抓交通肇事犯
问题描述
一辆卡车违反交通规则,撞人后逃跑,现场有三人目击事件,但都没有记住车号,只记下车号的一些特征,甲说:牌照的前两位数字是相同的 乙说:牌照的后两位数字是相同的,但与前两位不同, 丙是数学家,他说:四位的车号刚好是一个整数的平方 请根据以上线索求出车号
问题分析
按照题目的要求构造出一个前两位数相同,后两位数相同 且相互间又不同的4位整数,然后判断该整数是否是另一个整数的平方。即求一个四位数,满足如下的条件
|--a = b 1<=a<=9,0<=b<=9
|--c = d 0<=c,d<=9
|--a != c
|--1000a + 100b + 10c + d = x^2, x={z}
算法设计
该题目是数值计算问题,需要求解不定方程组 对于求解不定方程组的问题,一般采用穷举法
/* !< use c */
#include <stdio.h>
int main(void)
{
int i, j,k,tmp; /* !< i代表前两位车牌号数字,j代表后两位车牌号的数字,k代表车牌号*/
for (i = 0; i <= 9; i++) {
for (j = 0; j <= 9; j++) { /* !< 穷举前两位和后两位车牌数字*/
/* !< 判断前两位数字和后两位数字是否不同 */
if (i != j) {
/* 组成4位车牌号 */
k = 1000*i + 100*i + 10*j + j;
/* 判断k是否是某个数的平方,若是则输出 k */
for (tmp = 31; tmp <= 99; tmp++) {
if (tmp * tmp == k) {
printf("车牌号为%d", k);
}
}
}
}
}
}
/* !< use python */
for i in range(10):
for j in range(10):
if i != j :
k = 1000 * i + 100 * i + 10 *j + j
for temp in range(31,100):
if temp * temp == k:
print("k=",k)
/* !< output */
k= 7744