2019寒假算法基礎集訓營1 - B 小a與"204"
阿新 • • 發佈:2019-01-23
算法 UNC number container -a scanf 統計 plain http
題目:
小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++提交顯示錯誤
2019寒假算法基礎集訓營1 - B 小a與"204"