def max_sodas(n): # 定义一个关于最多能喝几瓶汽水的函数 sodas = 0 # 初始化小张能喝的汽水瓶数,第一轮空汽水瓶的个数为n while n >= 3: # 当n>=3时参与循环 exchanged = n // 3 # 可以交换的汽水瓶瓶数n整除3得到小张能喝的汽水瓶数,喝完之后又变成空的汽水瓶参与下一轮兑换 sodas += exchanged # 小张能喝的瓶数 n = n % 3 + exchanged # 下一轮继续参加兑换的瓶数,只要n>=3,就一直循环 if n == 2: # 当空汽水瓶为2时,小张可以跟老板借一个空瓶,兑换一瓶汽水喝完再还给老板一个空汽水瓶 sodas += 1 # 此时小张能喝到一瓶汽水 return sodas while True: try: n = int(input()) if n == 0: break print(max_sodas(n)) except: break
#include <iostream>using namespace std;intmain(){intn;while(cin>>n){cout<<n/2<<endl;}}
/*
递归问题
3个瓶子换1瓶水+1个空瓶子,两个瓶子换1瓶水+0个空瓶子,1个瓶子换0瓶水。
f(1) = 0
f(2) = 1
f(3) = 1
f(4) = f(2)+1 //4个瓶子,其中3个可以换1瓶水+1个空瓶,所以是f(2)+1
f(5) = f(3)+1 //3个瓶子换1瓶水+1个空瓶,所以是f(3)+1
...
f(n) = f(n-2)+1 */
#include <iostream>
using namespace std;
int f(int n)
{
if(n==1) return 0;
if(n==2) return 1;
return f(n-2)+1;
}
int main()
{
int n;
while(cin >> n){
if(n==0)
break;
cout<<f(n)<<endl;
}
return 0;
}
// f(n)=n/3 + f(n%3+n/3),貌似递归次数更少。 // n/3是能直接换到的汽水数,n%3+n/3是新换到的汽水瓶子+上次换剩下的 import java.util.*; public class Main { public static int f(int n) { if (n == 1) return 0; if (n == 2) return 1; return n / 3 + f(n % 3 + n / 3); } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int num = sc.nextInt(); if (num != 0) { System.out.println(f(num)); } } sc.close(); } }
//递归方法 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n; while(sc.hasNext()) { n=sc.nextInt(); System.out.println(Drink(n)); } } public static int Drink(int n) { if(n<=0) return 0; else if(n==3) return 1; else if(n==2) return 1; else//此时表明对应为3的倍数,递归 { int h=0; h=n/3; return h+Drink(n-3*h+h); } } }
#include<iostream> using namespace std; int main(){ int n; while(cin>>n){ if(n == 0) break; //正常的解法 /*int ret = 0; int a, b; while(n >= 3){ a = n/3; b = n%3; ret += a; n = a + b; } if(n == 2) ret += 1; cout<<ret<<endl;*/ //从给的样例中可以观察出来的规律 cout<<n/2<<endl; } return 0; }
import java.util.Scanner;
public class Main {
private static int blank;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
blank = scan.nextInt();
int drink = 0;
int remain;
if (blank > 0 && blank <= 100) {
if (blank == 1) {
drink = 0;
} else if (blank == 2) {
drink = 1;
}
while (blank > 2) { //10,4,5
drink += blank / 3; //3 drink,4 drink
remain = blank % 3; //1 remain,1 remain
blank = blank / 3 + remain; //4 blank,2 blank
if (blank == 2) {
drink++;
}
}
}
System.out.println(drink + "");
}
}
}
import numpy if __name__ == '__main__': print('Start!') n = int(input()) m = 0 if n < 2: print('You get no reward bottle!') elif n == 2: print('You get 1 bottle!') else: while n>2: m = m + n//3 n = n//3 + n%3 if n == 2: print('You get ', m + 1, ' bottle!') else: print('You get ', m, ' bottle!')
# python3 import sys def drink(n): if n <2: return 0 elif n==2: return 1 # 喝过的汽水数 -> n//3 # 剩下的空瓶数 -> n//3 + n%3 return n//3+drink(n//3+n%3) for line in sys.stdin: n = int(line.strip()) res =0 res =drink(n) print(res)
# 方法一:常规方法 for i in range(10): a, s = int(input()), 0 while True: if a < 2: # 小于2瓶,则不够兑换 break elif a == 2: # 等于两瓶,可以就借一瓶,然后归还 s += 1 break else: # 其他则正常处理 n, m = a // 3, a % 3 s += n a = n + m print(s) # 方法二:每两瓶借一瓶,然后归还,即喝一瓶,又没有剩余瓶子,而不足两瓶的也无法兑换 for i in range(10): a = int(input()) if a == 0: break else: print(a // 2)