蓝桥杯—等差数列
解决方案:
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; }