访友
访友
http://www.nowcoder.com/questionTerminal/b8e21f5816874425836b7d32011f46b0
题解:
题目难度:一星
考察点: 数论,贪心
易错点:
很多同学拿到这个题都有一种比较直观的想法,希望使用,维护两个值,一个是当前值,一个是当前步数,然后通过队列去维护所有的情况,当第一次值为时,所对应的值即为最小步数。但是这个题的空间是承受不下所有状态的,所以这种方法并不可取。
解法:贪心+数论
一种正确的贪心策略就是每次都走最大步数,也就是步,这样能够保证最快可以到达,当最后走不了步时,如果刚好到达,输出,否则为,因为在下一步总可以走步
#include "bits/stdc++.h" using namespace std; int main() { int x; scanf("%d",&x); printf("%d\n",x/5+(x%5==0? 0:1)); return 0; }