链接:https://ac.nowcoder.com/acm/contest/188/A?&headNav=www&headNav=acm
来源:牛客网
题目描述
小w想和你van纸牌
小w有两张纸牌,两张纸牌上都有相同的正整数n
每一轮一张纸牌上的数都可以减去小于等于另外一张纸牌上的数的数
每一轮只能操作和上轮不同的纸牌
小w想知道三轮之后两纸牌上数字之和的最小值
注意,不能减为负数
输入描述:
第一行1个正整数n。
输出描述:
一行一个整数
表示三轮之后两纸牌上数字和的最小值
示例1
输入
复制
2
输出
复制
1
说明
样例解释:两张ab上数字分别为2,第一轮,a张减去1(1 <= (b = 2))
第二轮b减去1(1 <= (a = 1)) ,
第三轮a减去1(1 <= (b = 1)),
游戏结束a+b = 1,该结果为最可行优解之一
备注:
保证1 ≤ n ≤ 1000000000
此题要求最可行优解,先找几个例子看看,比如输入5:可以找到5-3=2, 5-2=3, 2-2=0,最后3+0=3为最可行优解;再计算几个用例,输入6输出3,输入7输出4。不难发现,只要将输入的n进行n/2向下取整即可
PS:Math类相关的属性和方法见https://blog.csdn.net/heinara/article/details/86746227
法一
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println((int)Math.ceil(n/2.0));//天花板函数,向上取整
}
}
法二
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n%2==0)
System.out.println(n/2);
else
System.out.println(n/2+1);
}
}
法三
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(n-n/2);
// System.out.println((n+1)/2);同理也行
}
}