求这个四位数的车牌号

甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是不相同的,且与前两位不同;丙说:四位的车号刚好是一个整数的平方,还有一个人说最后两位数的最小公倍数为8。

穷举法试试吧,有没有运行时间限制呢

参考GPT和自己的思路:

根据甲、乙的说法,车牌号可以表示为 AABB 或者 ABCC 的形式。

根据丙的说法,我们列出一个方程:

(10A + B) * (10C + C) = 1000A + 100B + 10C + C

化简可得:

100A^2 + 11AB + BC = 1000A + 101C

移项得到:

100A(A - 10) + BC - 101C + AB = 0

由于A、B、C都是整数,且A必须为两位数,所以我们可以枚举A和B,算出对应的C:

当A = 10时,方程化简为 11B + BC = C,显然无解。

当A = 11时,方程化简为 11B + BC = 101C,可以算出B=2,C=8或者B=9,C=1。所以可能的车牌号为 1128 和 1191。

当A = 12时,方程化简为 12B + BC = 212C,无解。

当A = 13时,方程化简为 13B + BC = 313C,无解。

当A = 14时,方程化简为 14B + BC = 414C,无解。

当A = 15时,方程化简为 15B + BC = 515C,无解。

当A = 16时,方程化简为 16B + BC = 616C,无解。

当A = 17时,方程化简为 17B + BC = 717C,无解。

当A = 18时,方程化简为 18B + BC = 818C,无解。

当A = 19时,方程化简为 19B + BC = 919C,无解。

因此,可能的车牌号为 1128 和 1191。

最后一个人说最后两位数的最小公倍数为8,因此1191是符合条件的车牌号,因为它的最后两位数79的最小公倍数是8。

参考GPT和自己的思路:

根据题目,我们可以列出以下条件:

设车牌号为ABCD,其中A和B为车牌号的前两位数字,C和D为车牌号的后两位数字。

  1. A=B
  2. C≠D, C≠A, D≠B
  3. ABCD是一个整数的平方
  4. 最小公倍数为8,因此C和D中必然有一个是偶数

针对以上条件,我们可以通过计算得到车牌号为7744或1164(均满足以上四个条件)。其中7744为88的平方,1164为34的平方。

因此,甲、乙、丙和最后一个人所说的条件均能得到满足。

搞定!


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int gbs(int b,int c)
{
    int max;
    max = (b > c) ? b : c;

    while (1) {
        if (max % b == 0 && max % c == 0) {
           // printf("最小公倍数为:%d\n", max);
            break;
        }
        ++max;
    }

    return max;
}  



int main()
{
   // int a,b,c;
    int a = 0,b = 1,c = 1;
    if (a<10&&b<10&c<10)
    {
        for(a = 0;a<10;a++)
        {
            for(b = 1;b<10;b++)
            {
                for(c = 1;c<10;c++)
                {
                     double num = a*1000+a*100+b*10+c;
                    double sqrt_num = sqrt(num);
                    int o =  gbs(b,c);
                    if(a!=b&&a!=c&&b!=c&&sqrt_num == (int)sqrt_num&&o==8)
                    {
                        printf("%d%d%d",a,b,c);
                    }
                }
            }
          
        } 
    }
}