解题思路:这题要简单就非常的简单,如果要优化代码的话,就要用到一些算法。这里我们就无脑一下,直接秒杀掉。
我们就一路横冲直撞,一直到最后一个任务(正方向)或 第一个任务(反方向),然后掉头。遇到一个就判断一个:(这个任务做了没?这个任务能不能做?),如果都符合条件,就完成该任务,直至完成所有任务。
AC代码:
#include <stdio.h>
int n,ans,finishNum;
int task[1010];
int main()
{
while (scanf("%d",&n) != EOF)
{
int books[1010] = {0}; // 标记数组
ans = 0, finishNum = 0;
for (int i = 1; i <= n; i ++)
scanf("%d",&task[i]);
while ( 1 )
{ // 从左向右,一直到最后一个任务
for (int i = 1; i <= n; i ++)
{
if (task[i] <= finishNum && books[i] == 0) // 如果能完成该任务
{
finishNum ++;
books[i] = 1;
}
}
if (finishNum == n) break; // 如果任务还没有全完成
ans ++; // 掉头
// 从右向左,一直到第一个任务
for (int i = n; i >= 1; i --)
{
if (task[i] <= finishNum && books[i] == 0)
{
finishNum ++;
books[i] = 1;
}
}
if (finishNum == n) break; // 如果任务还没有全完成
ans ++; // 掉头
}
printf("%d\n",ans);
}
return 0;
}