Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 659|回复: 0

C语言趣味程序百例精解之JAVA实现(100)移数字

[复制链接]

该用户从未签到

发表于 2011-9-18 15:35:55 | 显示全部楼层 |阅读模式
C语言趣味程序百例精解之java实现(100)移数字

分析如下:


程序:

import java.util.Scanner;
public class MoveNum{
      int count=0;//数字移动步数计数器
      int b[]=new int[9];//表示3行3列的矩阵,b[4]为空格
       int t=0,w=0;
      public MoveNum(int b[]){
        this.b=b;
        }
        
   public static void main(String args[]){
     int c[]=new int[9];
     Scanner sc=new Scanner(System.in);
     System.out.printf("请输入初始数字1-8:\n");
     for(int i=0;i<9;i++){
          if(i==4) continue;
         c=sc.nextInt();
     }
      MoveNum moveN=new MoveNum(c);
      moveN.move();
  }
       public void move(){
      
         print(b);
      t=find(1);//1的位置
      w=next(t);//1的下一个位置
    for(int k=2;k<=8;k++){
     if(b[w]==k){
         t=find(k);//k的位置
         w=next(t);//k的下一个位置
        continue;
     }
      if(b[w]!=k){
        t= find(k);
        b[4]=b[t];
        b[t]=0;
       print(b);
       int x=prev(t);//k的前一个位置
        b[t]=b[x];
        b[x]=0;
        print(b);
        while(x!=w){
           b[x]=b[prev(x)];
            b[prev(x)]=0;
           print(b);
         x=prev(x);
         
        }
         b[x]=b[4];
         b[4]=0;
         t=x;
         w=next(t);
      }
          print(b);
    }
   
            
   }
     public int find(int k){//找k的位置
       for(int i=0;i<9;i++)
         if(b==k) return i;
      return -1;
    }
      
  public  int prev(int n){//前一个位置
          int p=0;
          switch(n){
            case 0:
              p=3;
              break;
            case 1:
              p=0;
              break;
            case 2:
              p=1;
              break;
            case 3:
               p=6;
               break;
            case 4:
                p=4;
                break;
             case 5:
                p=2;
                break;
             case 6:
                p=7;
                break;
             case 7:
                p=8;
                break;
             case 8:
                p=5;
                break;
             default:
                p=-1;
           }
          return p;
      }
        
     public static int next(int n){//下一个位置
          int p=0;
          switch(n){
            case 0:
              p=1;
              break;
            case 1:
              p=2;
              break;
            case 2:
              p=5;
              break;
            case 3:
               p=0;
               break;
            case 4:
                p=4;
                break;
             case 5:
                p=8;
                break;
             case 6:
                p=3;
                break;
             case 7:
                p=6;
                break;
             case 8:
                p=7;
                break;
             default:
                p=-1;
           }
          return p;
      }
              
     public  void print(int n[]){
       System.out.printf("---%2d---\n",count++);
        for(int c=0;c<9;c++){
            if(c%3==2) System.out.printf("%2d\n",n[c]);
            else System.out.printf("%2d",n[c]);
        
     }
  }
}
运行测试:
C:\bat>java   MoveNum
请输入初始数字1-8:
6
5
4
3
2
1
8
7
--- 0---
6 5 4
3 0 2
1 8 7
--- 1---
6 5 4
3 2 0
1 8 7
--- 2---
6 5 0
3 2 4
1 8 7
--- 3---
6 0 5
3 2 4
1 8 7
--- 4---
0 6 5
3 2 4
1 8 7
--- 5---
3 6 5
0 2 4
1 8 7
--- 6---
3 6 5
2 0 4
1 8 7
--- 7---
3 6 5
2 4 0
1 8 7
--- 8---
3 6 0
2 4 5
1 8 7
--- 9---
3 0 6
2 4 5
1 8 7
---10---
3 4 6
2 0 5
1 8 7
---11---
3 4 6
2 5 0
1 8 7
---12---
3 4 0
2 5 6
1 8 7
---13---
3 4 5
2 0 6
1 8 7
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-27 06:17 , Processed in 0.373236 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表