整数变换问题——回溯方法
问题描述:
整数i的两种变换定义为向下取整
设计一个算法求给定两个整数a和b,用最少次数的和变换将整数a变换为b;例如 4= gfgg(15)
解题思路:
使用二叉树方式表示方法g和方法f,左边节点为方法g,右边节点为方法f,利用方法调用实现循环,直至数字变换成功。
package com.lanxi.demo1;
import java.util.*;
public class TransInt {
static int m;
static int tempcount,bestcount;//当前变换次数,最佳变换次数
static int[] temp1=new int[100];
static int[] temp2=new int[100];
public static void main(String args[]){
Scanner input=new Scanner(System.in);
System.out.println("请输入需变换的整数");
int n=input.nextInt();
System.out.println("请输入需变换后的整数");
m=input.nextInt();
tempcount=0;
bestcount=100;
Transform(n);
System.out.println(bestcount);
for(int i=bestcount;i>=1;i--){
if(temp2[i]==2)System.out.print("f");
if(temp2[i]==1)System.out.print("g");
}
}
public static void Transform(int t){
if(t==m){//需变换的数字成功变换
if(tempcount<bestcount){
bestcount=tempcount;//将最小转换次数赋值给bestcount
for(int i=1;i<=bestcount;i++){
temp2[i]=temp1[i];//temp2存最小次数转换方法
}
}
return ;
}
int temp=t/2;
tempcount++;
if(tempcount<bestcount&& t>0){
temp1[tempcount]=1;//使用方法g赋值为1
Transform(temp);
}
tempcount--;//回溯
temp=3*t;
tempcount++;
if(tempcount<bestcount){
temp1[tempcount]=2;//使用方法f赋值为2
Transform(temp);
}
tempcount--;//回溯
}
}
时间最会骗人,但也能让你明白,这个世界上没有什么是不能失去的,留下的尽力珍惜,得不到的都不重要
浙公网安备 33010602011771号