C語言經典例題(一)
阿新 • • 發佈:2019-02-10
1.需求描述:
一輛卡車違反交通規則,撞人後逃跑。現場有三人目擊該事件,但都沒有記住車牌號,只記下車牌號的一些特徵。甲說:牌照前兩位數字是相同的;乙說:牌照的後兩位數字是相同的,但與前兩位不同;丙是數學家,他說:四位的車牌號剛好是一個整數的平方。請根據以上線索求出車牌號。
2.問題分析:
首先可以確定車牌號只由2個數字組成,第一、二位相同,第三、四位相同,並且車牌號組成的數是一個整數的平方。從這裡就可以看出此程式有兩個for語句巢狀迴圈,在迴圈中還存在著一個判斷,由於還要判斷是否為一個整數的平方,所以還要再加一層迴圈。
3.完整程式
#include <stdio.h>
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;
}
輸出結果
程式優化:
進一步的分析可以看出第一、二位為大於0的數,所以第一層迴圈可以從1開始,因為這個車牌表示的四位數第一、二位不為0,所以該車牌一定大於1100而小於9999,所以那個整數一定大於33並且小於100,所以迴圈次數可以進一步減少,通過修改迴圈條件的初始值我們可以提高程式碼的執行速率。
優化程式碼:
#include <stdio.h>
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;
}
但是程式還存在著不足,因為車牌號應該是唯一的,所以最佳的程式應該是一旦找到該車牌號就立即停止尋找,直接輸出。