hdu 2277 Change the ball(找规律)

题意:有三种球,每两种球各一个可以变换成第三种球两个。这种规则不能反过来使用,求最少的步数能够把三种球换成1种球。
题解:首先考虑三种球(a、b、c)的各种情况:
第一种情况:a==b!=c(即有两种球数量相等)此时答案为:a;
第二种情况:a==b==c(即三种球数量都相等) 此时答案为:a;
第三种情况:全转化为a或全转化为b或者全部转化为c,他们能够转化成功的条件为:

c-b是3的倍数,c-a是3的倍数,b-a是3的倍数(比如转化成a,首先把b,c(c>b)数量转成一样的即(c-b)/3*2+b,其需要(c-b)/3次,在把b,c转化为a需要(c-b)/3*2+b次,总次数为(c-b)/3+(c-b)/3*2+b=c次其中不用考虑a转成负数的情况,因为全部转化成a的时候肯定是正数。。。)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
	int a[3],s;
	while(~scanf("%d%d%d",&a[0],&a[1],&a[2])){
		sort(a,a+3);
		s=a[2];
		if(a[0]==a[1]){
			s=a[1];
		}else if(a[1]==a[2]){
			s=a[1];
		}else if((a[1]-a[0])%3==0){//1 4 5
			s=a[1];
		}else if((a[2]-a[1])%3==0){//1 2 5
			s=a[2];
		}else if((a[2]-a[0])%3==0){//1 2 4
			s=a[2];
		}else{
			printf("):\n");
			continue;
		}
		printf("%d\n",s);
	}
	return 0;
} 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值