本题将会给出
组测试数据,确切数字未知,您需要一直读入直到特定的结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下:
在一行上输入一个整数
,代表小张手上的空汽水瓶数量。特别地,
代表输入结束,您只需要立即退出,不需要针对这种情况进行处理。
对于每一组测试数据,新起一行。输出一个整数,代表小张最多可以喝到的汽水数量。
3 10 81 0
1 5 40
对于第一组测试数据,共有
个空瓶,可以换
瓶汽水。可以证明无法再做任何兑换,因此最多可以喝到
瓶汽水。
对于第二组测试数据:
第一轮兑换,共有
个空瓶。可以换
瓶汽水,余下
个空瓶;
第二轮兑换,刚刚余下
个空瓶、加上刚刚兑换的
瓶汽水喝完,共有
个空瓶。可以换
瓶汽水,余下
个空瓶;
第三轮兑换,刚刚余下
个空瓶、加上刚刚兑换的
瓶汽水喝完、再找老板借
个空瓶,共有
个空瓶。可以换
瓶汽水,余下
个空瓶。喝完之后不要忘记归还借的空瓶。
综上,一共可以喝到
瓶汽水。
#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)