C 语言学习 《抓交通肇事犯》-简化版

前言

我是一名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;
}

总结

本题目的经典解法是嵌套三个循环,不仅麻烦,而且对于新手并不友好。

而我的方法不仅简化了程序,而且无嵌套循环,还大大减少了可能的循环次数。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值