题目:
小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++提交显示错误