优快云编程挑战——《-3+1》

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.youkuaiyun.com/user_longling/article/details/24674033


-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类型 */ 



优快云挑战编程交流群:372863405             

转载于:https://www.cnblogs.com/ldxsuanfa/p/10508602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值