解题思路:
本题是要求判断元素为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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复