贪心算法——数列操作得到最大的值

#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]);
 }

 

 

posted on 2018-01-01 23:19  小星_log  阅读(519)  评论(0编辑  收藏  举报