-3+1
題目詳情:
有一個數列,所有的數都是非負整數,你可以進行如下方式進行一次操作(注意一次完整的操作必須先后完成如下兩個步驟):
(1) 任選一個不小于3的數,把它減少3。
(2) 任選一個數把它增加1。
請問,最多能夠操作多少次?
輸入格式:
多組數據,每組數據第一行是一個正整數n,表示數列中數的個數。(1<=n<=20000)
第二行包含n個空格分隔的非負整數,每個整數不超過1000000。
輸出格式:
對每組數據輸出一行,表示最多可以進行的操作次數。
答題說明:
輸入樣例
1
10
2
10 11
輸出樣例:
4
10
#include "stdio.h"
#include "string.h"
int main()
{long long res,add; //res結果,add表示要加1的次數 int n,a[3];while(scanf("%d",&n)!=EOF){memset(a,0,sizeof(a)); add=0; res=0;for(int i=0,tmp;i<n;i++){scanf("%d",&tmp);add+=tmp/3;a[tmp%3]++;}res=add;while(add-->0){// 任選一個數把它增加1,有優先級的 if(a[2]>0){a[2]--; a[0]++; res++; add++;}else if(a[1]>0){a[1]--; a[2]++; }else if(a[0]>0){a[0]--; a[1]++; }}printf("%I64d\n",res);}return 0;
}
/* 注意:結果值為int類型,數據大時可能會溢出因此須定義為long long類型 */
#include "stdio.h"
#include "string.h"
int main()
{long long res,add; //res結果,add表示要加1的次數 int n,a[3];while(scanf("%d",&n)!=EOF){memset(a,0,sizeof(a)); add=0; res=0;for(int i=0,tmp;i<n;i++){scanf("%d",&tmp);add+=tmp/3;a[tmp%3]++;}res=add;while(add-->0){// 任選一個數把它增加1,有優先級的 if(a[2]>0){a[2]--; a[0]++; res++; add++;}else if(a[1]>0){a[1]--; a[2]++; }else if(a[0]>0){a[0]--; a[1]++; }}printf("%I64d\n",res);}return 0;
}
/* 注意:結果值為int類型,數據大時可能會溢出因此須定義為long long類型 */
CSDN挑戰編程交流群:372863405?????????????