Sapphire
2022/2/22
解题思路:
不论有多少个空汽水瓶,最后剩余的汽水瓶(n)一共只有三种情况。
剩余1个,可以兑换的汽水数就是n/3;
剩余2个,由于可以向老板借一瓶,所以可以兑换的汽水数是n/3+1;
剩余3个,直接就是n/3+1。
如果剩余4个,则相当于n/3+1后再剩一个,回到情况1。
如果剩余5个,则相当于n/3+1后剩两个,回到情况2。
如果剩余6个,则相当于剩余n/3+1后剩余三个,回到情况3。
注意事项:
n=n/3+n%3的意思是说,比如空汽水瓶有8个,8/3=2代表能换两个,并且喝完后又有一个空的,8%3=2代表还有2个空汽水瓶没换着,那么这时就有2+2=4个空汽水瓶,4>3,进入递归,4/3+4%3==2,是情况2,则count+1,游戏结束。
static int count=0;//由于每进入一次函数,形参会被摧毁,所以用static来修饰,防止count的值在每次调用函数时被遗忘。
参考代码:
#include <stdio.h> static int count=0;//由于每进入一次函数,形参会被摧毁,所以用static来修饰 int cola(int n) { count+=n/3; n=n/3+n%3; if(n>3) { cola(n);//如果汽水瓶大于三个,则递归,直到算到剩余3个以内为止 } if(n==1) return count; if(n==2||n==3) return count+1; } int main() { int n; int i; for(i=0;i<10;i++) { scanf("%d",&n); if(n) count=cola(n); else break; printf("%d\n",count); count=0; } return 0; }
如果这篇文章有帮助到你,希望你给一个赞,加油,陌生人!
0.0分
2 人评分
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C++代码)(手动优化一下计算)浏览:1365 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:949 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1215 |
【排队买票】 (C语言代码)浏览:944 |
本人酷爱递归实现很多问题,这里也是浏览:631 |
简单的a+b (C语言代码)浏览:560 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:651 |
1009题解浏览:802 |
幸运数 (C++代码)浏览:1309 |
sizeof的大作用 (C语言代码)浏览:1590 |