【C语言蓝桥杯每日一题】——等差数列?
前言?等差数列?解题思路分析:?解题源代码分享:? 总结撒花?
?博客昵称:博客小梦
?最喜欢的座右铭:全神贯注的上吧!!!
?作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!
?博主小留言:哈喽!?各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!?
前言?
哈喽各位友友们?,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!?我仅已此文,和大家分享【C语言蓝桥杯每日一题】——等差数列~ 都是精华内容,可不要错过哟!!!???
等差数列?
这道题,我用到了C语言中的qsort库函数,它是一种基于快排算法思想的排序函数。首先,想让大家认识一下qsort库函数的大概样子,和如何使用。
这个qsort库函数有四个参数:
void *base : 指向一个需要比较的一组数据的空间的指针;size_t num: 比较的元素个数;size_t width:元素的大小(字节);int (__cdecl *compare )(const void *elem1, const void *elem2 ) :一个函数指针。这个函数设计的返回值和strcmp函数的设计思路一致。
解题思路分析:?
首选认真将题目看完,因为是涉及到等差数列,所以要回想起等差数列的一些性质。由等差数列的 an = a1 + (n - 1) x d; 我们可以推出 项数 n =( ( an - a1)/ d ) + 1 。一般刷题网站都是支持变长数组语法的,所以我这里利用变长数组创建一个存放n个整型变量的数组。然后利用qsort将数组进行一个升序排序(qsort库函数本身设计就是进行一个升序排序)。然后寻找相邻两个数的最小差值作为这个数组的公差。因为满足这个就能保证所有其他元素设计成最短的符合条件的等差数列。
解题源代码分享:?
#include <stdio.h>#include <stdlib.h>int compare(const void* e1, const void* e2){ return *(int*)e1 - *(int*)e2;}int min(int a, int b){ return a < b ? a : b;}int main(int argc, char* argv[]){ int n = 0; scanf("%d", &n); int arr[n]; int i = 0; int d = 0; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } qsort(arr, n, sizeof(int), compare); d = arr[1] - arr[0]; for (i = 1; i < n - 1; i++) { d = min(arr[i + 1] - arr[i], d); } if (d == 0) printf("%d", n); else printf("%d", ((arr[n - 1] - arr[0]) / d) + 1); return 0;}
程序输出结果验证: ?
总结撒花?
本篇文章旨在分享【C语言蓝桥杯每日一题】——等差数列。希望大家通过阅读此文有所收获!?如果我写的有什么不好之处,请在文章下方给出你宝贵的意见?。如果觉得我写的好的话请点个赞赞和关注哦~???