C语言经典例题(一)

1.需求描述:
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车牌号,只记下车牌号的一些特征。甲说:牌照前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车牌号刚好是一个整数的平方。请根据以上线索求出车牌号。
2.问题分析:
首先可以确定车牌号只由2个数字组成,第一、二位相同,第三、四位相同,并且车牌号组成的数是一个整数的平方。从这里就可以看出此程序有两个for语句嵌套循环,在循环中还存在着一个判断,由于还要判断是否为一个整数的平方,所以还要再加一层循环。
3.完整程序

#include 

int main()
{
   int a;
   int c;
   int num;
   int temp;

   for(a = 0; a <= 9; a++)
   {
       for(c = 0; c <= 9; c++)
       {
           if(a !=c)
           {
               num = 1000 * a + 100 * a + 10 * c + c;
               for(temp = 0; temp <=99; temp++)
               {
                   if(temp * temp == num)
                  {
                       printf("the plate number is :%d\n",num);
                  }
               }
           }
       }
   }   
   return 0;
}

输出结果
linux中用gcc编译的结果
程序优化:
进一步的分析可以看出第一、二位为大于0的数,所以第一层循环可以从1开始,因为这个车牌表示的四位数第一、二位不为0,所以该车牌一定大于1100而小于9999,所以那个整数一定大于33并且小于100,所以循环次数可以进一步减少,通过修改循环条件的初始值我们可以提高代码的运行速率。
优化代码:

#include 

int main()
{
   int a;
   int c;
   int num;
   int temp;

   for(a = 1; a <= 9; a++)
   {
       for(c = 0; c <= 9; c++)
       {
           if(a !=c)
          {
               num = 1000 * a + 100 * a + 10 * c + c;
               for(temp = 33; temp <=99; temp++)
               {
                   if(temp * temp == num)
                   {
                       printf("the plate number is :%d\n",num);
                   }
               }
           }
        }
   }   
   return 0;
}

但是程序还存在着不足,因为车牌号应该是唯一的,所以最佳的程序应该是一旦找到该车牌号就立即停止寻找,直接输出。

你可能感兴趣的:(C语言)