热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

动手动脑,无法自拔(3)课时作业6

1.动手动脑(五子棋棋盘排布)(1)源程序(2)实验截图2.动手动脑(数字转换成汉字)(1)源程序(2)实验截图3.动手动脑(大数计算)(1)源程序

1.动手动脑(五子棋棋盘排布)

(1)源程序

 1 import java.io.*;
 2 
 3 public class QiPan
 4 {
 5     //定义一个二维数组来充当棋盘
 6     private String[][] board;
 7     //定义棋盘的大小(宏定义)
 8     private static int BOARD_SIZE = 15;
 9     
10     //初始化棋盘
11     public void initBoard()
12     {
13         //初始化棋盘数组
14         board = new String[BOARD_SIZE][BOARD_SIZE];
15         //把每个元素赋为"╋",用于在控制台画出棋盘
16         for (int i = 0 ; i )
17         {
18             for ( int j = 0 ; j )
19             {
20                 board[i][j] = "╋";
21             }
22         }
23     }
24     //在控制台输出棋盘的方法
25     public void printBoard()
26     {
27         //打印每个数组元素
28         for (int i = 0 ; i )
29         {
30             for ( int j = 0 ; j )
31             {
32                 //打印数组元素后不换行
33                 System.out.print(board[i][j]);
34             }
35             //每打印完一行数组元素后输出一个换行符
36             System.out.print("\n");
37         }
38     }
39     public static void main(String[] args)throws Exception
40     {
41         QiPan gb = new QiPan();
42         gb.initBoard();
43         gb.printBoard();
44         //这是用于获取键盘输入的方法
45         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
46         String inputStr = null;
47                 System.out.println("请输入您下棋的座标,应以x,y的格式:");
48         //br.readLine():每当在键盘上输入一行内容按回车,刚输入的内容将被br读取到。
49         while ((inputStr = br.readLine()) != null)
50         {
51             //将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串
52             String[] posStrArr = inputStr.split(",");
53             //将2个字符串转换成用户下棋的座标
54             int xPos = Integer.parseInt(posStrArr[0]);
55             int yPos = Integer.parseInt(posStrArr[1]);
56             //把对应的数组元素赋为"●"。
57             gb.board[xPos - 1][yPos - 1] = "●";    
58             
59             while(true)
60             {
61                  int xvalue = (int) ( Math.random() * 15 );
62                  int yvalue = (int) ( Math.random() * 15 );
63                  if(gb.board[xvalue - 1][yvalue - 1] .equals("●")==false||
64                          gb.board[xPos - 1][yPos - 1].equals("*")==false)
65                  {
66                      gb.board[xvalue - 1][yvalue - 1] = "*";
67                      break;
68                  }
69             }
70             
71             /*
72              电脑随机生成2个整数,作为电脑下棋的座标,赋给board数组。
73              还涉及
74                 1.座标的有效性,只能是数字,不能超出棋盘范围
75                 2.如果下的棋的点,不能重复下棋。
76                 3.每次下棋后,需要扫描谁赢了
77              */
78             gb.printBoard();
79             System.out.println("请输入您下棋的座标,应以x,y的格式:");
80         }
81     }
82 }

(2)实验截图

技术分享

2.动手动脑(数字转换成汉字)

(1)源程序

 1 public class Num2Rmb
 2 {
 3     private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , 
 4         "伍" , "陆" , "柒" , "捌" , "玖"};
 5     private String[] unitArr = {"十" , "百" , "千","万","十万","百万"};
 6 
 7     /**
 8      * 把一个四位的数字字符串变成汉字字符串
 9      * @param numStr 需要被转换的四位的数字字符串
10      * @return 四位的数字字符串被转换成的汉字字符串。
11      */
12     private String toHanStr(String numStr)
13     {
14         String result = "";
15         int numLen = numStr.length();
16         //依次遍历数字字符串的每一位数字
17         for (int i = 0 ; i  )
18         {
19             //把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
20             //因此把char型数字减去48得到int型数字,例如‘4‘被转换成4。
21             int num = numStr.charAt(i) - 48;
22             //如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
23             if ( i != numLen - 1 && num != 0)
24             {
25                 result += hanArr[num] + unitArr[numLen - 2 - i];
26             }
27             //否则不要添加单位
28             else
29             {
30                 
31                 //上一个数是否为“零”,不为“零”时就添加
32                 if(result.length()>0 && hanArr[num].equals("零") && result.charAt(result.length()-1)==‘零‘)
33                     continue;
34                 result += hanArr[num];
35             }
36         }
37         //只有个位数,直接返回
38         if(result.length()==1)
39             return result;
40         
41         int index=result.length()-1;
42         while(result.charAt(index)==‘零‘){
43             index--;
44         }
45         if(index!=result.length()-1)
46             return result.substring(0,index+1);
47         else {
48             return result;
49         }
50     }
51 
52     public static void main(String[] args) 
53     {        
54         Num2Rmb nr = new Num2Rmb();
55         System.out.println("只支持整数(0~百万)");
56         //测试把一个四位的数字字符串变成汉字字符串
57         System.out.println(nr.toHanStr("0"));
58         System.out.println(nr.toHanStr("1"));
59         System.out.println(nr.toHanStr("10"));
60         System.out.println(nr.toHanStr("15"));
61         System.out.println(nr.toHanStr("110"));
62         System.out.println(nr.toHanStr("123"));
63         System.out.println(nr.toHanStr("105"));
64         System.out.println(nr.toHanStr("1000"));
65         System.out.println(nr.toHanStr("1100"));
66         System.out.println(nr.toHanStr("1110"));
67         System.out.println(nr.toHanStr("1005"));
68         System.out.println(nr.toHanStr("1105"));
69         System.out.println(nr.toHanStr("1111"));
70         System.out.println(nr.toHanStr("10000"));
71         System.out.println(nr.toHanStr("10001"));
72         System.out.println(nr.toHanStr("10011"));
73         System.out.println(nr.toHanStr("10111"));
74         System.out.println(nr.toHanStr("11111"));
75         System.out.println(nr.toHanStr("11000"));
76         System.out.println(nr.toHanStr("11100"));
77         System.out.println(nr.toHanStr("11110"));
78         System.out.println(nr.toHanStr("101110"));
79         System.out.println(nr.toHanStr("1001110"));
80         
81     }
82 }

(2)实验截图

技术分享

3.动手动脑(大数计算)

(1)源程序

  1 import java.util.Scanner;
  2 
  3 public class Dashu{
  4         public static int[]add(int []a,int []b){
  5             int digit=0;//位数
  6             int[]c=new int[a.length];
  7             for(int i=a.length-1;i>=0;i--)
  8             {
  9                 c[i]=a[i]+b[i]+digit;
 10                 if(c[i]<10)
 11                     digit=0;
 12                 else
 13                 {
 14                     c[i]=c[i]-10;
 15                     digit=1;
 16                 }
 17             }
 18             return c;
 19     }
 20         public static int []sub(int []a,int[]b,int w)
 21         {
 22             int digit=0;
 23             int[]c=new int[a.length];
 24             for(int i=a.length-1;i>=0;i--)
 25             {
 26                 if(w<=0)
 27                 {
 28                     c[i]=b[i]-a[i]-digit;
 29                     if(c[i]>=0)
 30                     {   digit=0;}
 31                     else
 32                     {
 33                         c[i]=c[i]+10;
 34                         digit=1;
 35                     }
 36                 }
 37                     else
 38                     {
 39                         c[i]=a[i]-b[i]-digit;
 40                         if(c[i]>=0)
 41                         {digit=0;}
 42                         else
 43                         {
 44                             c[i]=c[i]+10;
 45                             digit=1;
 46                         }
 47                  }
 48              }
 49                 return c;
 50             }
 51             public static void main(String[]args){
 52                 int a[]=new int[50];
 53                 int b[]=new int[50];
 54                 int m=0;
 55                 int n=0;
 56                 int s=0;
 57                 int t=0;int w=0;
 58                 Scanner in=new Scanner(System.in);
 59                 System.out.println("请输入第一个大数:");
 60                 String aa=in.next();
 61                 System.out.println("请输入第二个大数:");
 62                 String bb=in.next();
 63                 m=a.length-aa.length();
 64                 n=b.length-bb.length();
 65                 if(aa.length()>bb.length())
 66                 {
 67                     w=1;
 68                 }
 69                 else if (aa.length()<bb.length())
 70                 {
 71                     w=-1;
 72                 }
 73                 else
 74                     {w = aa.compareTo(bb);}
 75                 for (int i = 0; i )
 76                 {
 77                     a[m++] = aa.charAt(i) - 48;
 78                 }
 79                 for (int j = 0; j )
 80                 {
 81                     b[n++] = bb.charAt(j) - 48;
 82                 }
 83                     int[] c = Dashu.add(a, b);
 84                     for (int k = 0; k )
 85                     {
 86                         if (c[k] > 0)
 87                         {
 88                         s = k;
 89                         break;
 90                         }
 91                     }
 92                     System.out.print("大数相加的结果为:");
 93                     for (int i = s; i ) {
 94                     System.out.print(c[i]);
 95                     }
 96                     System.out.println();
 97                     int[] d = Dashu.sub(a, b, w);
 98                     for (int k = 0; k )
 99                     {
100                         if (d[k] > 0)
101                         {
102                         t = k;
103                         break;
104                         }
105                     }
106                     System.out.print("大数相减的结果为:");
107                     if (w <0)
108                     System.out.print("-");
109                     for (int i = t; i )
110                     {
111                         System.out.print(d[i]);
112                     }
113                     System.out.println();
114                     System.out.println();
115                     System.out.println();
116                     System.out.println();
117  
118  
119                     }
120 }

(2)实验截图

技术分享

动手动脑,无法自拔(3)课时作业6


推荐阅读
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
author-avatar
我细细
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有