一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。
按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的4位整数, 然后判断该整数是否是另一个整数的平方。即求一个四位 满足如下的条件:
该题是数值计算问题,求解不定方程。采用穷举循环,首先设计双层循环穷举出所有由前两位数和后两位数组成的4位数车牌,然后在最内层穷举出所有平方后值为4位数并且小于车牌号的数,最后判断该数是否与车牌相等,若相等则打印车牌。
下面是完整的代码:
#include<stdio.h>
int main()
{
int i, j, k, temp; /*i代表前两位车牌号数字,j代表后两位车牌号的数字,k代表车牌号*/
for(i=0; i<=9; i++)
for(j=0; j<=9; j++) /*穷举前两位和后两位车牌数字*/
{
/*判断前两位数字和后两位数字是否不同*/
if(i!=j)
{
/*组成4位车牌号k*/
k = 1000*i + 100*i + 10*j + j;
/*判断k是否是某个数的平方,若是则输出k*/
for(temp=31; temp<=99; temp++)
if(temp*temp == k)
printf("车牌号为%d\n", k);
}
}
return 0;
}
运行结果:车牌号为7744
再次利用循环来实现,循环变量temp求平方和车牌号k比较,如相等则找到车牌号。优化算法,temp的初值应该从31开始,因为小于30的数的平方小于4位数,因此该层循环为最内层循环,对每一个车牌号均做如此操作。
/*判断k是否是某个数的平方,若是则输出k*/
for(temp=31; temp<=99; temp++)
if(temp*temp==k)
printf("车牌号为%d\n",k);