蓝桥 给定正整数n JAVA

你的任务是用最少的操作次数把序列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;
	}

小剧场:我欲穿花寻路,直入白云深处,浩气展霓虹。

发布了108 篇原创文章 · 获赞 113 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43771695/article/details/104625244