本文主要是介绍XDOJ695.等差数列及位置指示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
标题 等差数列及位置指示
类别 数组
时间限制 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;
}
这篇关于XDOJ695.等差数列及位置指示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!