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入门到精通教程
查看: 579|回复: 0

[算法学习]C语言趣味程序百例精解之JAVA实现(100)移数字

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-23 00:06:09 | 显示全部楼层 |阅读模式
    C语言趣味程序百例精解之java实现(100)移数字

    分析如下:


    程序:
    1. import java.util.Scanner;
    2. public class MoveNum{
    3.       int count=0;//数字移动步数计数器
    4.       int b[]=new int[9];//表示3行3列的矩阵,b[4]为空格
    5.        int t=0,w=0;
    6.       public MoveNum(int b[]){
    7.         this.b=b;
    8.         }
    9.         
    10.    public static void main(String args[]){
    11.      int c[]=new int[9];
    12.      Scanner sc=new Scanner(System.in);
    13.      System.out.printf("请输入初始数字1-8:
    14. ");
    15.      for(int i=0;i<9;i++){
    16.           if(i==4) continue;
    17.          c[i]=sc.nextInt();
    18.      }
    19.       MoveNum moveN=new MoveNum(c);
    20.       moveN.move();
    21.   }
    22.        public void move(){
    23.       
    24.          print(b);
    25.       t=find(1);//1的位置
    26.       w=next(t);//1的下一个位置
    27.     for(int k=2;k<=8;k++){
    28.      if(b[w]==k){
    29.          t=find(k);//k的位置
    30.          w=next(t);//k的下一个位置
    31.         continue;
    32.      }
    33.       if(b[w]!=k){
    34.         t= find(k);
    35.         b[4]=b[t];
    36.         b[t]=0;
    37.        print(b);
    38.        int x=prev(t);//k的前一个位置
    39.         b[t]=b[x];
    40.         b[x]=0;
    41.         print(b);
    42.         while(x!=w){
    43.            b[x]=b[prev(x)];
    44.             b[prev(x)]=0;
    45.            print(b);
    46.          x=prev(x);
    47.          
    48.         }
    49.          b[x]=b[4];
    50.          b[4]=0;
    51.          t=x;
    52.          w=next(t);
    53.       }
    54.           print(b);
    55.     }
    56.    
    57.             
    58.    }
    59.      public int find(int k){//找k的位置
    60.        for(int i=0;i<9;i++)
    61.          if(b[i]==k) return i;
    62.       return -1;
    63.     }
    64.       
    65.   public  int prev(int n){//前一个位置
    66.           int p=0;
    67.           switch(n){
    68.             case 0:
    69.               p=3;
    70.               break;
    71.             case 1:
    72.               p=0;
    73.               break;
    74.             case 2:
    75.               p=1;
    76.               break;
    77.             case 3:
    78.                p=6;
    79.                break;
    80.             case 4:
    81.                 p=4;
    82.                 break;
    83.              case 5:
    84.                 p=2;
    85.                 break;
    86.              case 6:
    87.                 p=7;
    88.                 break;
    89.              case 7:
    90.                 p=8;
    91.                 break;
    92.              case 8:
    93.                 p=5;
    94.                 break;
    95.              default:
    96.                 p=-1;
    97.            }
    98.           return p;
    99.       }
    100.         
    101.      public static int next(int n){//下一个位置
    102.           int p=0;
    103.           switch(n){
    104.             case 0:
    105.               p=1;
    106.               break;
    107.             case 1:
    108.               p=2;
    109.               break;
    110.             case 2:
    111.               p=5;
    112.               break;
    113.             case 3:
    114.                p=0;
    115.                break;
    116.             case 4:
    117.                 p=4;
    118.                 break;
    119.              case 5:
    120.                 p=8;
    121.                 break;
    122.              case 6:
    123.                 p=3;
    124.                 break;
    125.              case 7:
    126.                 p=6;
    127.                 break;
    128.              case 8:
    129.                 p=7;
    130.                 break;
    131.              default:
    132.                 p=-1;
    133.            }
    134.           return p;
    135.       }
    136.               
    137.      public  void print(int n[]){
    138.        System.out.printf("---%2d---
    139. ",count++);
    140.         for(int c=0;c<9;c++){
    141.             if(c%3==2) System.out.printf("%2d
    142. ",n[c]);
    143.             else System.out.printf("%2d",n[c]);
    144.         
    145.      }
    146.   }
    147. }
    148. 运行测试:

    149. C:at>java   MoveNum
    150. 请输入初始数字1-8:
    151. 6
    152. 5
    153. 4
    154. 3
    155. 2
    156. 1
    157. 8
    158. 7
    159. --- 0---
    160. 6 5 4
    161. 3 0 2
    162. 1 8 7
    163. --- 1---
    164. 6 5 4
    165. 3 2 0
    166. 1 8 7
    167. --- 2---
    168. 6 5 0
    169. 3 2 4
    170. 1 8 7
    171. --- 3---
    172. 6 0 5
    173. 3 2 4
    174. 1 8 7
    175. --- 4---
    176. 0 6 5
    177. 3 2 4
    178. 1 8 7
    179. --- 5---
    180. 3 6 5
    181. 0 2 4
    182. 1 8 7
    183. --- 6---
    184. 3 6 5
    185. 2 0 4
    186. 1 8 7
    187. --- 7---
    188. 3 6 5
    189. 2 4 0
    190. 1 8 7
    191. --- 8---
    192. 3 6 0
    193. 2 4 5
    194. 1 8 7
    195. --- 9---
    196. 3 0 6
    197. 2 4 5
    198. 1 8 7
    199. ---10---
    200. 3 4 6
    201. 2 0 5
    202. 1 8 7
    203. ---11---
    204. 3 4 6
    205. 2 5 0
    206. 1 8 7
    207. ---12---
    208. 3 4 0
    209. 2 5 6
    210. 1 8 7
    211. ---13---
    212. 3 4 5
    213. 2 0 6
    214. 1 8 7
    215.                      
    复制代码

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/23/000609734.zip
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-25 04:18 , Processed in 0.349261 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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