蓝桥杯—等差数列

解决方案:
1.找出5个数中两数最小之差(假定公差)
2.从5个数的最小项开始加公差,加到大于等于5个数的最大项后,看是否遍及5项的每一项。
遍及:确定公差
未遍及:拟公差减一
最坏情况公差为1
#include"stdio.h"
void out(int gc,int a[]){//输出最小项数
//int ou=a[0];记录等差数列各项
int sum=0;
while(ou<=a[4]){
//printf("%d\n",ou);//输出各项
sum++;
//ou=ou+gc;
}
printf("%d ",sum);
}
int q(int x,int a[]){//确定数列中是否含有5个数
int i;
for(i=1;i<5;i++){
if(a[i]==x){
return 1;
}
}
return 0;
}
int w(int s,int a[]){//递归确定公差
int x=a[0];
int sum=0;
while(a[5]>x){
x=x+s;
if(q(x,a)){//新数列含5个数中的1个加1
sum++;
}
}
if(sum==4){
return s;
}else{
return w(s-1,a);
}
}
int g(int a[]){//
int i;
int s=a[1]-a[0];
for(i=0;i<4;i++){
if(a[i+1]-a[i]<s){
s=a[i+1]-a[i];
}
}
return s;//返回最小差(拟公差)
}
int f(int a[]){
int i,j,t;
for(i=0;i<4;i++){//排序,便于确定5个数中最大值和最小值
for(j=i+1;j<5;j++){
if(a[i]>a[j]){
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
return g(a);
}
int main(){
int a[5];
int i;
int s;//最小之差
int gc;
for(i=0;i<5;i++){//录入5个数字
scanf("%d",&a[i]);
}
s=f(a);//获得两数最小之差
gc=w(s,a);//最小之差,数组a地址,,确定公差
//printf("%d",gc);
out(gc,a);
return 0;
}
本文介绍了一种解决蓝桥杯等差数列问题的方法,通过找到五个数中的最小公差,并验证该公差是否能覆盖所有五个数。代码实现了排序、寻找最小公差、验证公差及输出等差数列的功能。
4138





