问题标题: 酷町堂:2457 买汽水

0
0
已解决
王淼
王淼
中级守护
中级守护

错误代码: 

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int f(int n){
    if(n==1) return 1;
    return n+f(n/2);
}
int main(){
    cin>>n;
    cout<<f(n);
    return 0;
}

哪错了?没空找错发思路也行。

 

(又栽在做过的题上了)


0
已采纳
张易晨
张易晨
新手光能
新手光能

分析: 我们可以算用n个空瓶子总共能换回多少瓶汽水。
如果没有空瓶子或者只有1个空瓶子,一瓶汽水都换不到。
如果有n只空瓶子(n>1),

  • 可以换来n/2瓶汽水,剩n%2个空瓶子;
  • 当换来的汽水喝完之后,就有了n/2+n%2个空瓶子,又可以拿去换汽水……

所以n只瓶子总共能换来的汽水数量 = n/2 + (n/2+n%2个空瓶子总共能换来的汽水数量)

所以:

        1.把第六行改为if(n==0||n==1)  return 0;

        2.把第七行改为return n/2+f(n/2+n%2);

        3.题目问的是能得到的汽水瓶数,所以输出改为cout<<n+f(n);

张易晨在2021-07-10 09:16:11追加了内容

你要是看不懂直接看最后三行也行

[doge]

0
薛子翔
薛子翔
初级守护
初级守护

出函数部分:

int f(int n){

    如果n==0或n==1{

     return 0;

        }

    return n/2+f(n%2+n/2);

 

递归。

0
我要回答