题目链接
普及题:
http://acm.zzuli.edu.cn/problem.php?id=1329
提高题:
http://acm.zzuli.edu.cn/problem.php?id=1330
普及题
1329: 汽水瓶
思路:模拟空瓶子兑换汽水的过程即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin >> n, n != 0){
int ans = 0;
while(n >= 2){
ans = ans + n/3;
n = n%3 + n/3;
if(n == 2){
ans++; n = 0;
}
}
cout << ans << endl;
}
}
还有一个简单的方法:从题目中可以发现,其实两个空瓶子就可以换一瓶汽水,向老板借一个瓶子换汽水,喝完后将空瓶子还给老板,这样一来也不会有剩余的空瓶子。因此,只需输出n/2即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin >> n, n != 0){
cout << n/2 << endl;
}
}
提高题
1330: 数字整除
根据题目意思:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。每次去掉该数的末位,并减去末位数的五倍,得到一个新数,继续重复判断,直到数位为2后,判断是否为17的倍数。 好麻烦…
所以直接选择java的BigInteger,真香。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.next();
if(str.equals("0")) break;
BigInteger bs = new BigInteger(str);
if(bs.mod(new BigInteger("17")).equals(new BigInteger("0"))){
System.out.println("1");
}else{
System.out.println("0");
}
}
}
}
但毕竟是java很容易会超时的,还有一种解决大数除以小数的方法,那就是模拟我们平时笔算时的除法,代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin >> s){
if(s == "0") break;
int m = 0;
for(int i = 0; i < s.size(); i++)
m = (m*10+s[i]-'0') % 17;
if(!m)
cout << "1" << endl;
else
cout << "0" <<endl;
}
return 0;
}
上面的代码是直接判断是否能够取余的,如果想要得出除以的结果,可以再加上一个字符串,记录每次(m*10+s[i]-‘0’) / 17的值即可。