/*
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,
但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两
位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两
位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。
请根据以上线索求出车号。
算法分析:
将4位车牌号分为高低各2位数,因为高低两位数相同,故循环时
高低两位只需各加11递增。当满足甲、乙条件时再判断是否满足丙条件。
*/
#include <iostream>
#include <cmath>
using namespace std;
bool IsPow(int num); //函数声明
int main()
{
int high,low,num;
bool flag=false;
for(high=0;high<=99;high+=11) //高两位循环
{
for(low=0;low<=99;low+=11) //低两位循环
{
if(high!=low)
{
num=high*100+low; //将高低各两位合并为一个数
flag=IsPow(num); //判断满足前两个条件的数是否为某个整数的平方
if(flag==true) //输出车牌号,若高或低位为00时满足条件,做特殊处理
{
if(high==0)
cout<<"车牌号为:00"<<low<<endl;
else
if(low==0)
cout<<"车牌号为:"<<high<<"00"<<endl;
else
cout<<"车牌号为:"<<high<<low<<endl;
break;
}
}
}
if(flag==true)
break;
}
return 0;
}
//判断数给定数是否为某个整数的平方
bool IsPow(int num)
{
for(int i=1;i<=(int)sqrt(num);i++)
if(num==pow(i,2))
return true;
return false;
}