时间限制:1.0s 内存限制:256.0MB
数组A中共有n个元素,初始全为0。你可以对数组进行两种操作:1、将数组中的一个元素加1;2、将数组中所有元素乘2。求将数组A从初始状态变为目标状态B所需要的最少操作数。
第一行一个正整数n表示数组中元素的个数
第二行n个正整数表示目标状态B中的元素
第二行n个正整数表示目标状态B中的元素
输出一行表示最少操作数
2
7 8
7 8
7
n<=50,B[i]<=1000
倒着来,遍历每一个数,如果是奇数则减1,次数++,如果全是偶数,则全部除2,次数++
import java.util.*; public class change { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] list = new int[n]; for (int i = 0; i < list.length; i++) { list[i] = sc.nextInt(); } int result = 0; boolean xiangdeng = true; // 相等 do { boolean jishu = false; // 奇数 for (int i = 0; i < list.length; i++) { if (list[i] != 0) { xiangdeng = false; } if (list[i] % 2 != 0) { jishu = true; } } if (jishu) { for (int i = 0; i < list.length; i++) { if (list[i] % 2 != 0) { list[i]--; result++; } } } else { for (int i = 0; i < list.length; i++) { list[i] /= 2; } result++; } boolean flag = true; for (int i = 0; i < list.length; i++) { if (list[i] != 0) { flag = false; break; } } if (flag) { break; } } while (!xiangdeng); System.out.println(result); } }
评论 (0)