解题思路:
本题是要求判断元素为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语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:668 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:584 |
【蟠桃记】 (C语言代码)浏览:1084 |
字符串比较 (C语言代码)浏览:770 |
判定字符位置 (C语言代码)浏览:849 |
C语言训练-自守数问题 (C语言代码)浏览:798 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:487 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:489 |
WU-C语言程序设计教程(第三版)课后习题12.3 (C++代码)浏览:925 |
回文数(一) (C语言代码)浏览:1170 |