有n只蚂蚁在一根木棍上,蚂蚁们只知道距左端的距离,棍子的长度,但不知道他们的朝向,蚂蚁们走到端点的时候会落下木棍,求蚂蚁们走过的最短和最长长度。

本题目看似很难,其实很简单,就下几行代码。自己模拟一下过程就可以发现可以将蚂蚁间走过的路程互相补在一起的话,那么每只蚂蚁走过的路程为棍子长度 - 蚂蚁距某端的最短距离。

在代码中 int x[n];  之所以可以编译的原因是在之上有

    int n,length;
    scanf("%d%d",&length,&n);     此时的n已不为未知数            //格瑞那猜测所得结论

用到的算法有累加 min = min + x[i]; max = max + (length - x[i]); 其实这也不算算法吧....    --==--

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,length;
    scanf("%d%d",&length,&n);
    int x[n];
    int i;
    int max = 0,min = 0;
    for(i = 0;i < n;i++){
        scanf("%d",&x[i]);
    }
    //默认数组内的元素都是从小到大的排列
    for(i = 0;i < n;i++){
        if(x[i] > length - x[i]){
            x[i] = length - x[i];
        }
        min = min + x[i];
        max = max + (length - x[i]);
    }
    printf("min = %d\n",min);
    printf("max = %d\n",max);

    return 0;
}
 

猜你喜欢

转载自blog.csdn.net/xlh006/article/details/81167236