XDOJ695.等差数列及位置指示
2023-12-20 00:21:17
标题 等差数列及位置指示
类别 数组
时间限制 2S
内存限制 1000Kb
问题描述 请写一个程序,判断给定整数序列能否构成一个等差数列。
输入说明 输入数据由两行构成,第一行只有一个整数 n(n<100),表示序列长度(该序列中整数的 个数); 第二行为 n 个整数,每个整数互不相同,且取值区间都为[-32768~32767],整数之间以空格 间隔。
输出说明 对输入数据进行判断,若不能构成等差数列,将数列递增排序,分别输出排序后数据间的 最大差值和最小差值,数据间以空格分隔; 若能构成等差数列,将数列递增排序,并输出排序后各个数据在原数列中的对应位置(位置 计数从 1 开始)。
输入样例1
6
21 15 4 18 35 11
输出样例 1
14 3
输入样例 2 ?
5
2 6 8 4 10 ?
输出样例 2
1 4 2 3 5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void* num1, const void* num2)
{
return (*(int*)num1 - *(int*)num2);
}
int judge(int arr[], int len)
{
int i = 0;
int d = arr[1] - arr[0];
for (i = 0; i < len - 1; i++)
{
if (arr[i + 1] - arr[i] != d)
{
return 0;
}
}
return 1;
}
int main()
{
int n = 0;
int arr[101] = { 0 };
scanf("%d", &n);
int store[101] = { 0 };
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
store[i] = arr[i];
}
qsort(arr, n, sizeof(arr[0]), int_cmp);
int ret = judge(arr, n);
if (ret)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (arr[i] == store[j])
{
printf("%d ", j + 1);
}
}
}
}
else
{
int sub[100] = { 0 };
for (int i = 0; i < n - 1; i++)
{
sub[i] = arr[i + 1] - arr[i];
}
int max = sub[0];
int min = sub[0];
for (int i = 0; i < n - 1; i++)
{
if (sub[i] > max)
{
max = sub[i];
}
if (sub[i] < min)
{
min = sub[i];
}
}
printf("%d %d", max, min);
}
return 0;
}
文章来源:https://blog.csdn.net/yonpiguxiao/article/details/135088493
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!