前言
我是一名C 语言的初级学习者。在学习中,我做了这么一道题目,对答案时却发现我的做法与参考答案和网络上的相关资料有所差异。因此,我将我的做法分享出来,希望能够给同学们带来一些思考与启发或是能有大佬能够指出我的程序中可能隐藏的问题。
1、问题描述
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。
甲说:牌照的前两位数字是相同的;
乙说:牌照的后两位数字是相同的,但与前两位不同;
丙是数学家,他说:四位的车号刚好是一个整数的平方。
请根据以上线索求出车号。
2、题目分析
根据题目可知:车牌号n是四位数,我们不妨将其视作abcd。
那么满足
3、程序设计
这种题目,一看就是穷举法循环求解,那就直接上代码。
#include <stdio.h>
int main () {
int i, n, a, b, c, d = 0;
for (i = 32; i < 100; i++) {
//整数32的平方是最小的四位数,因此,循环从32开始
n = i * i;
a = n / 1000;//求第一位数
b = (n / 100) % 10;//求第二位数
c = (n / 10) % 10;//求第三位数
d = (n % 10);//求第四位数
if (a == b && b != c && c == d) {//用&&来表示逻辑且,即同时满足这三个条件
printf("肇事车辆的车牌号为:%d", n);
break;//使循环结束
}
}
return 0;
}
总结
本题目的经典解法是嵌套三个循环,不仅麻烦,而且对于新手并不友好。
而我的方法不仅简化了程序,而且无嵌套循环,还大大减少了可能的循环次数。