私信TA

用户名:dotcpp0784625

访问量:146

签 名:

等  级
排  名 2348
经  验 2319
参赛次数 0
文章发表 19
年  龄 20
在职情况 学生
学  校 北京理工大学
专  业 弹药工程与爆炸技术

  自我简介:

解题思路:

本题是要求判断元素为n的数组中,相邻元素的差的绝对值是否可以排列成1~n-1的有序数组,要求该有序数组连续。

首先,应当建立一个较大的整型数组来包含输入的数组。

其次,可以将数组之间两相邻元素求差的绝对值,覆盖两元素中前一个元素,并将最后一个元素设置为0,便的到了绝对值数组。

然后,采用冒泡排序的方式对绝对值数组的前n-1项进行排序,得到升序的数组

最后,将升序数组的每一位与i+1进行比较,如果整个数组都符合要求便输出“Jolly”,若不是便输出“Not jolly”

参考代码:

#include <stdio.h>


//该函数的返回值为两元素差的绝对值

int my_count(int x, int y)

{

    return (x < y) ? (y - x) : (x - y);

}


int main()

{

    int arr[3000] = { 0 };

    int n = 0;


    scanf("%d", &n);


    int i = 0;

    int j = 0;

    for (i = 0; i < n; i++)

    {

        scanf("%d", &arr[i]);

    }


    //当输入元素数量为1的时候,均满足题目要求

    if (n == 1)

    {

        printf("Jolly\n");

    }


    对输入元素数量大于1的情况进行分析

    else

    {


        //返回数组相邻两元素差的绝对值,并覆盖前一个元素,成为新的元素

        for (i = 0; i < n - 1; i++)

        {

            arr[i] = my_count(arr[i], arr[i + 1]);

        }

        arr[n - 1] = 0;

        //这一步结束之后即可得到差的绝对值数组


        //冒泡排序

        for (i = 0; i < n - 1; i++)

        {

            for (j = 0; j < n - i - 2; j++)

            {

                if (arr[j] > arr[j + 1])

                {

                    int temp = arr[j];

                    arr[j] = arr[j + 1];

                    arr[j + 1] = temp;

                }

            }

        }


        //判断该数组的每一位是否都符合题目要求

        int flag = 1;

        for (i = 0; i < n - 1; i++)

        {

            if (arr[i] == i + 1)

            {

                continue;

            }

            else

            {

                flag = 0;

                break;

            }

        }

        if (flag == 1)

        {

            printf("Jolly\n");

        }

        else

        {

            printf("Not jolly\n");

        }

    }


    return 0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »