最近读了一本编程算法的书,里面有些案例很有意思,所以分享给大家,其中会夹杂我自己的想法,希望大家也能学到一些东西!
我们经常从一些娱乐节目看见有种猜商品价格的游戏,例如:假设有一辆价格为640块钱的自行车要参与者猜价格,提示是该自行车的价格在1000元以下,一般参与者可以会按照以下方式竞猜:
参与者:900
主持人:高了
参与者:850
主持人:高了
参与者:800
主持人:高了参与者:750
主持人:高了参与者:700
主持人:高了参与者:650
主持人:高了参与者:600
主持人:高了参与者:610
主持人:低了参与者:620
主持人:低了参与者:630
主持人:低了参与者:640
主持人:恭喜你,答对了。
该参与者的算法思想是:商品价格在1000以下 自行车价格应该不会太低,因此从900开始猜,依次递减50,当低于价格时再以10递增,直到猜出准确价格。这是一种算法,参与者猜了11次 猜出了实际价格
但如果答题者是一名程序员的话,那可不会用上面的方法,太low了。
程序员:500
主持人:低了
程序员:750
主持人:高了
程序员:620
主持人:低了
程序员:680
主持人:高了
程序员:650
主持人:高了
程序员:630
主持人:低了
程序员:640
主持人:恭喜你 答对了
程序员用的算法逻辑就是二分法,首先得出中间价500,如果比500高 那么再取500-1000的中间值,依次类推 直到最后的结果,只用了7步。
此算法可以运用于生活各个领域里面,生生处处有算法啊。 附上此游戏的
// 算法之二分法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int price = 0;
int guessPrice = 0;
printf("请输入商品的价格");
scanf_s("%d",&price);
system("cls");
while (price!=guessPrice)
{
printf("请输入试猜的价格:\n");
scanf_s("%d",&guessPrice);
if(price>guessPrice)
{
printf("猜低了\n");
}
else if(price<guessPrice)
{
printf("猜高了\n");
}
else
{
printf("猜对了\n");
}
}
system("pause");
return 0;
}