3023:《偏远小山村》

题目描述

在一个偏远的小山村生活着一群奇怪的人,他们供奉着一棵神树,人们可以对神树祈求。

如果人们使用一次祈求将会产生下列效果中的其中一种
(1)对神树祝福,神树的能量值 +6
(2)对神树祝福,神树的能量值 +4
(3)受到神树的祝福,神树的能量值 −3
(4)受到神树的祝福,神树的能量值 −2

最初神树的能量值为 0 ,现给出此时神树的能量值,问达到这种状态最少需要人们进行多少次祈求

输入

本题为多实例
每行一个整数 x(神树此时的能量值,0≤x≤109)

输出

只输出一个整数表示神树的能量值从 0 到 x 所需要的最少的祈求次数。

样例输入 Copy

12
4
5

样例输出 Copy

2
1
3

提示

x=4 时:(0)+4 一次操作即可
x=5 时:(0)+4+4−3 三次操作即可

/*这个也和贪心有关,他问最少进行多少操作能达到目标
那我们可以逆着来,给一个目标,最少经过多少操作变为0*/
/*因为是问最少次数嘛,所以就先除以6和对6取余,从6走肯定最少*/
/*+6,+4,-3,-2反过来就是-6,-4,+3,+2,感觉就是有几种情况要考虑完全*/
#include <stdio.h>
int main()
{ int n;
  int x,y;	
   while(scanf("%d",&n)!=EOF) //多实例测试
   {
    x=n/6,y=n%6;
	/*x是除以6,y是对6取余*/
    if(y==0) printf("%d\n",x);
	/*如果y为0,也就证明n是6的倍数,那直接输出x就好了,就最少了*/
   else if(n==2) printf("2\n");
/*如果我们输入的n为2,那很明显,一次-4,一次+2,两次变为0,直接输出2*/
   else if(y==1||y==3) printf("%d\n",x+2);
/*如果余数为1或者为3,那我们目标就是如何凑出来1,3*/
/*简单,4-3=1,4-2=2,两次变为0,再加上我们除以6得到的x,x是几就代表执行了几次6的操作*/
   else if(y==2||y==4) printf("%d\n",x+1);
/*这个等于2的时候可能有点小迷,这个正着来,不反,
就是如果我们n对6取余得到2,要得到这个2,我们可能就要
认为是2次操作了,其实不是,得找最少次数,举个例子,n为14,14/6=2,%6=2,x=2,那我们
撤回一次6(相当于+6)(撤回一次操作那x就得-1)的操作,这时候n为8(2+6),8就简单啦,4+4两次操作
所以总操作次数是(x-1+2=x+1)*/
   else  	printf("%d\n",x+3);
/*其余的就+3就行了,如取余6得到5,两次-4,一次+3,刚好变0*/
}
return 0;
}/*想好情况,尤其是y为2的情况*/

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值