2019寒假算法基础集训营1 - B 小a与"204"

题目:

小a非常喜欢这个数字,因为
现在他有一个长度为的序列,其中只含有这三种数字
为序列中第个数,你需要重新排列这个数列,使得最大(公式的含义是:每个数与前一个数差的平方的和)
注意:我们默认

代码:

#include <stdio.h>
 
int main()
{
     int n;
     //输入的时候
     while ( scanf ( "%d" ,&n)!=EOF)
     {
         int a=0,b=0,c=0,sum=0;
         int zz,xx;
         //输入一行的n个整数
         for ( int i=0;i<n;i++)
         {
             int num;
             scanf ( "%d" ,&num);
             if (num==0)
                 a++;
             if (num==2)
                 b++;
             if (num==4)
                 c++;
         }
         //如果4 和 0 的个数相等的话
         if (c==a)
         {
             if (b!=0)
                 sum=16*(c+a)+4;
             else
                 sum=16*(c+a);
         }
         //如果4 比 0 的个数多的话
         else if (c>a)
         {
             zz = c - (c-a-1);  //0 少的 4 的个数
             if (b==0)
                 sum = 16*(a+zz);
             else if ((b-1)>=(c-a-1))
                 sum = 16*(a+zz)+4+4*2*(c-a-1);
             else
                 sum = 16*(a+zz)+4+4*(c-zz+b-1);
         }
         //如果4 比 0 的个数少的话
         else if (c<a)
         {
             xx = a-c; //剩下的0的个数
             if (xx==b)
                 sum = 16*2*c+4*2*xx;
             else
             {
                 if (b==0)
                     sum = 16*2*c;
                 else
                 {
                     int number = xx<b? xx:b;
                     sum = 16*2*c+4*(2*number+1);
                 }
             }
         }
         printf ( "%d" ,sum);
     }
}
 
解法:
1. 将4 0 2 分别统计个数
2. 通过贪心,分别4 0 4 0 2 (这里有4和0的数目关系)
 
遇到的问题:
无法将解法流畅的转换成代码!多写
提交的时候,c和从c++还是有区别的,用c++提交显示错误

猜你喜欢

转载自www.cnblogs.com/gufana/p/10306499.html
今日推荐