C语言抓交通肇事犯问题
问题描述
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。问题分析
按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的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
补充说明:判断车牌k是否为某个整数的平方
再次利用循环来实现,循环变量temp求平方和车牌号k比较,如相等则找到车牌号。优化算法,temp的初值应该从31开始,因为小于30的数的平方小于4位数,因此该层循环为最内层循环,对每一个车牌号均做如此操作。/*判断k是否是某个数的平方,若是则输出k*/ for(temp=31; temp<=99; temp++) if(temp*temp==k) printf("车牌号为%d\n",k);