C语言判断给定整数序列是否构成等差数列

C语言判断给定整数序列是否构成等差数列

题目:
判断给定整数序列能够构成等差序列。

输入说明:
有多组数据,每组输入数据由两行构成,第一行只有一个整数n(<1000),表示序列(即序列中整数的个数,0表示输入结束),第二行为n个整数,每个整数的均为int类型。

输出说明:
对于每一组数据,输出一个yes或者no,表示该序列能否构成等差序列。

输入样本:
6
23 15 4 18 35 11
3
3 1 2
0

输出样本:
no
yes

思路分析:
本题理解起来其实不难,第一步,解决输入问题;第二步,将给定数据排序;第三步,判断序列是否为等差序列;第四步,输出结果。好,分析结束,接下来压力给到代码编写部分!

代码:

#include
#include

typedef struct node
{
	int key;  //0表示no,1表示yes
	struct node* next;
}Linklist;

int main(void) {
	int n;
	int i, j;
	Linklist* head, *p, *q; 
	 //由于数据组数为动态,选用带头结点的链表存储
	head = (Linklist*)malloc(sizeof(Linklist));  //分配内存
	head->next = NULL;
	p = head;

	while(1){
		scanf("%d", &n);
		if(n == 0) {
			p = head->next;
			while(p != NULL) {
				if(p->key == 0) {
					printf("no\n");
				}else if(p->key == 1) {
					printf("yes\n");
				}
				p = p->next;
			}
			break;
		}
 	

		int array[n];
	//定义数据数组,输入数据
		for(i = 0; i < n; i++) {
			scanf("%d", &array[i]);
		}
	//调用函数,对数组数据进行排序
		mySort(array, n);
		//判断是否为等差数列
		//此处用的方法为:计算前两个数的差值
		//再一次将后面两数的差值与其比较看是否相等
		//等,则为等差数列,否则不是
		int num = array[1] - array[0];
		q = (Linklist*)malloc(sizeof(Linklist));
		q->next = NULL;
		for(i = 1;i < n; i++) {
			if((array[i] - array[i - 1]) != num) {
				q->key = 0;
				break;  //不是等差数列,退出循环
			}	
		}
	//正常退出循环,是等差数列
		if(i == n) {
			q->key = 1;
		}
		p->next = q;
		p = q;
	}
	return 0;
}
	//排序函数
void mySort(int array[], int n) {
	int i, j;
	int temp;
	for(i = 0; i < n - 1; i++) {
		for(j = i + 1; j < n; j++) {
			if(array[i] > array[j]) {
				temp = array[i];
				array[i] = array[j];
				array[j] = temp;
			}
		}
	}
}

运行结果:
C语言判断给定整数序列是否构成等差数列_第1张图片

小结:
单从代码来说,其实并没有很难的点,结构体,链表,malloc函数申请内存空间,冒泡排序,只要思路不乱代码很好理解,要注意细节的把控。


在这里插入图片描述

你可能感兴趣的:(C语言,c语言,链表,数据结构)