贪心算法——数列操作得到最大的值
#include <stdio.h> void main() { int k,i,j,n; long h,x,y,z,a[200]; printf(" 请输入数列项数n:"); scanf("%d",&n); for(k=1;k<=n;k++) // 逐个输入数列中的各个整数 { printf(" 请输入数列的第%d项: ",k); scanf("%ld",&a[k]); } for(i=1;i<=2;i++) for(j=i+1;j<=n;j++) if(a[i]>a[j]) // 求出n项的最小2项 { h=a[i];a[i]=a[j];a[j]=h;} printf(" 原始数据为:"); for(j=1;j<=n;j++) // 原始数据最小2项排前 printf("%ld ",a[j]); for(k=1;k<=n-1;k++) // 共操作n-1次 { x=a[k]; y=a[k+1]; a[k+1]=x*y+1; // 实施一次操作 z=a[k+1]; printf("\n 第%d次操作后为:",k); // 输出操作结果 for(i=k+1;i<=k+2;i++) for(j=i+1;j<=n;j++) // 操作后最小2项排前 if(a[i]>a[j]) {h=a[i];a[i]=a[j];a[j]=h;} for(j=k+1;j<=n;j++) { printf("%ld ",a[j]); if(a[j]==z) // 注明操作数 printf("(%ld*%ld+1)",x,y); } } printf("\n 该数列操作所得最大值为:%ld \n",a[n]); }