牛客网经典题型的讲解

首先我们来看第一道题目:小乐乐上电梯

牛客网经典题型的讲解_第1张图片

拿到该题目时,首先我们脑袋中就应该有大概的思路:一种是直接上去电梯不需要等待,另一种是需要等待一次或者几次才能上去的情况。因此我们脑袋中要构建大概的框架

第一步,我们先对题目中所运用到的值进行定义:


    int n = 0;//前面有n个人;
    int up = 2;//上楼的时间进行定义;
    int down = 2;//下楼所需的时间进行定义;
    int time = 0;//对总的时间进行初始化;

 

 第二步就是我们前面所提到的俩种情况我们分别依次列举出来:

 if (n / 12 == 0)//因为有俩种情况我们可以直接用if来进行判断
    {//判断第一种情况下我们不用等电梯,也就是说电梯的人小于12个人,因此我们只用花费上楼的时间;
        time = time + 2;
    }
    else if (n / 12 != 0)//来到第二种情况下我们需要判断前面有n个人并且此时n>12
    {
        time = (n / 12) * (down + up) + up;//此时我们n/12判断前面有几波人,因n是整型因此只会得到商,此时得到结果是在你之前有几波人,但是到你的时候你还需要一个上去的过程,因此要加上一个上去的时间up
    }

因此我们知道,该题无非就是俩种情况直接上去需要2分钟,和等待电梯的人数大于12时,判断出n/12所得到的商就是前面电梯要上下来回的次数,但此时你并没有上去因此我们需要加上我们上去的时间:up

第三步就是把我们的思路合并成总代码,代码如下:

int main()
{
    int n = 0;
    int up = 2;//上楼的时间进行定义;
    int down = 2;//下楼所需的时间进行定义;
    int time = 0;//对总的时间进行初始化;
    scanf("%d", &n);
    //拿到该题目脑袋中首先要有想到有俩种情况,第一种是不用等直接上去,第二种是等了几波人然后才能上去;
    if (n / 12 == 0)//因为有俩种情况我们可以直接用if来进行判断
    {//判断第一种情况下我们不用等电梯,也就是说电梯的人小于12个人,因此我们只用花费上楼的时间;
        time = time + 2;
    }
    else if (n / 12 != 0)//来到第二种情况下我们需要判断前面有n个人并且此时n>12
    {
        time = (n / 12) * (down + up) + up;//此时我们n/12判断前面有几波人,因n是整型因此只会得到商,此时得到结果是在你之前有几波人,但是到你的时候你还需要一个上去的过程,因此要加上一个上去的时间up
    }
    printf("%d", time);
    return 0;
}

第二道题目:逆序输出

牛客网经典题型的讲解_第2张图片

 拿到该题目时首先我们也应当在脑袋中或者动手去构建大致的框架去帮助我们思考,因此看到该题目逆序输出时我们应该想到如下思路:

牛客网经典题型的讲解_第3张图片

 可是这时候问题就来了,到最后arr[5]并没有一个值可以让他赋值,这时候我们就应该想到引入第三个值把arr数组中的每一个值给他储存起来,思路如下:

 

len = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < 10; i++)
	{
		tmp[i] = arr[len - i - 1];
		printf("%d ", tmp[i]);
	}

此时大家又会有个以为为什么Len要减去一个1,这时我们应该想到该数组由十个数组成其长度为10,但在arr中第一个数下标为0,最后一个数下标为9故而我们减去一个让他从最后一个数开始赋值.

那么整体的思路有了,我们的代码块如下:

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int tmp[10] = { 0 };
	int len = 0;
	len = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < 10; i++)
	{
		tmp[i] = arr[len - i - 1];
		printf("%d ", tmp[i]);
	}
}

你可能感兴趣的:(算法)