你的任务是用最少的操作次数把序列1,2,…,n中的所有数都变成0。
每次操作可从序列中选择一个或多个整数,
同时减去一个相同的正整数。比如,
1,2,3可以把2和3同时减小2,得到1,0,1。
[输入]
输入包含多组数据。每组仅一行,为正整数n(n≤109)。
输入结束标志为文件结束符(EOF)。
[输出]
对于每组数据,输出最少操作次数。
思路 :就是一串数据,完了一直同时减他们的最大公倍数,减到0为止,输出减的次数。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()) { //判断是否有数据输入
int x=scanner.nextInt();
int ans=1; //1-0的时候还有一次,所以要给个固定1
while (x!=1) {
x/=2;
ans++;
}
System.out.println(ans);
}
}
下面这个调用方法不好理解……
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n, m = 0;
n = scanner.nextInt();
System.out.println(function(n, m));
}
public static int function(int n, int m) {
while (n != 0) {
if (n == 1)
return 0;
else if (n % 2 == 0)
return 1 + function(n / 2, m + 1);
int x = function(n + 1, m + 1);
int y = function(n - 1, m + 1);
if (x > y) return y + 1;
else return x + 1;
}
return m;
}