竞赛 |
---|
Ants |
方法一:穷竭搜索
蚂蚁的朝向有两种情况,n只蚂蚁一共2^n种情况
呈指数递增,不适用
方案二:分情况
最短时间:蚂蚁背朝背向距离最近的一端走>>找到距离棍子端点最远的
最长时间:蚂蚁相遇后折返
在讨论所有蚂蚁的时间时,将所有蚂蚁看成一个整体,相当于蚂蚁相遇后交错而行>>找离端点最远的蚂蚁
#include<iostream>
using namespace std;
int l;
int main()
{
int n, * p;
cout << "输入蚂蚁个数n" << endl;
cin >> n;
p = new int [n];
cout << "input the length of the pole" << endl;
cin >> l;
cout << "input the site of each ants";
for (int i = 0; i < n; i++)
{
cin >> p[i];
}
int max=0,min;//求最长最短时间
int smax(int n);
int smin(int n);
min = smin(p[0]);
for (int i = 0; i < n; i++)
{
if (max < smax(p[i]))max = smax(p[i]);
if (min < smin(p[i]))min = smin(p[i]);
}
cout << "max:"<<max << endl <<"min:"<< min << endl;
delete []p;
}
int smax(int n)
{
if (n < l / 2)return l - n;
else return n;
}
int smin(int n)
{
if (n < l / 2)return n;
else return l - n;
}
用smax,smin函数分别寻找时间最长和最短的情况
而在main函数中的循环查找中,max和min都使用<
if (max < smax(p[i]))max = smax(p[i]);
if (min < smin(p[i]))min = smin(p[i]);
需要注意:题目求的是所有蚂蚁的时间,在寻找用时最短的时候找用时最长的蚂蚁
总结为:
max=max(max,max(p[i],l-p[i]);
min=max(min,min(p[i],l-p[i]);