NYOJ 1170 最大的数(待续)

来源:互联网 发布:java所有关键字 编辑:程序博客网 时间:2024/05/16 08:51

题目链接
小鲍提供的算法,我写的代码,体会不出贪心的算法,找不出代码WA的原因,在此附上自己的代码和网上的代码,待日后解决。。
我的代码

#include<stdio.h>#include<math.h>int main(){    int n,ans;    int a[10010];    while(scanf("%d",&n)!=EOF)    {        ans=1;        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);        }        if(a[1]==1)        {            a[2]++;        }        for(int i=2;i<n;i++)        {            if(a[i]==1)            {                if(a[i-1]>a[i+1])                    a[i+1]++;                else                    a[i-1]++;            }        }        if(a[n]==1)            a[n-1]++;        for(int i=1;i<=n;i++)        {            //printf("%d ",a[i]);            ans*=a[i];            ans=ans%10086;        }        printf("%d\n",ans);    }    return 0;}

网上的

#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>using namespace std;int a[10005];void add(int l,int r){    if(a[l]==2)    {        a[l]++;        return ;    }    if(a[l]==0)        l--;    a[l]<=a[r]?a[l]++:a[r]++;}int main(){    int n;    while(cin>>n)    {        int i,j;        for(i=0; i<n; i++)            cin>>a[i];        if(a[0]==1)        {            a[1]++;            a[0]=0;        }        for(i=1; i<n-1; i++)            if(a[i]==1)            {                a[i]=0;                add(i-1,i+1);//左加or右加            }        if(a[n-1]==1&&n>1)        {            for(i=n-2; !a[i]; i--);//0            a[i]++;            a[n-1]=0;        }        int sum;        for(i=0,sum=1; i<n; i++)            if(a[i])                sum=(sum*a[i])%10086;        cout<<sum<<endl;    }}
0 0
原创粉丝点击