精华内容
下载资源
问答
  • 解法一: public class Chess_Test { public static void main(String[] args) throws InterruptedException{ long t1 = System.currentTimeMillis(); Byte i = 81; ...

     

    解法一:


    public class Chess_Test {
        
        public static void main(String[] args) throws InterruptedException{
            long t1 = System.currentTimeMillis();
            
            Byte i = 81;
            while(i-- > 0){
                if(i / 9 % 3 == i % 9 % 3)
                    continue;
                System.out.println(String.format("A = %d, B = %d\n", i / 9 + 1, i % 9 + 1));
            }
            System.out.println(System.currentTimeMillis()-t1);
            
        }
    }

    解法二:




    public class Chess_Test2 {
        
        class Point{
            char a;
            char b;
        }
        
        public static void main(String[] args) throws InterruptedException{
            long t1 = System.currentTimeMillis();
            Point p = new Chess_Test2().new Point();
            for(p.a = 1; p.a <= 9; p.a++){
                for(p.b = 1; p.b <= 9; p.b++){
                    if(p.a % 3 == p.b % 3){
                        continue;
                    }
                    System.out.println(String.format("A = %c, B = %c\n", p.a+'0', p.b+'0'));
                }
            }
            System.out.println(System.currentTimeMillis()-t1);
            
        }
    }

    转载于:https://www.cnblogs.com/edward-tj/p/4501129.html

    展开全文
  • // 题目:中国象棋将帅问题,输出所有符合规则的将帅位置,用1-9代表九宫格中的位置 // 解法1:使用两个变量i和j表示将和帅的位置 public class Main { public static void main(String[] args){ printPos(); }...
    // 题目:中国象棋将帅问题,输出所有符合规则的将帅位置,用1-9代表九宫格中的位置
    // 解法1:使用两个变量i和j表示将和帅的位置
    public class Main {
    
    	public static void main(String[] args){
    		printPos();
    	}
    	
    	public static void printPos(){
    		for(int i = 0;i<9;i++){
    			for(int j = 0;j<9;j++){
    				if(i%3 == j%3){
    					continue;
    				}else{
    					System.out.println("A = "+(i+1)+", B = "+(j+1));
    				}
    			}
    		}
    	}
    
    }
    
    // 解法2:只用一个变量做不同的处理就可以分别表示将和帅的位置
    public class Main {
    	
    	public static void main(String[] args){
    		printPos();
    	}
    	
    	public static void printPos(){
    		byte i = 81;
    		while(i--!=0){
    			int temp1 = i/9%3;								//i/9是一个位置
    			int temp2 = i%9%3;								//i%9是另一个位置,之所以要%3是为了防止类似于3,6,9这种情况的发生
    			if(temp1 == temp2){
    				continue;
    			}
    			System.out.println("A = "+(i/9+1)+", B = "+(i%9+1));
    		}
    	}
    	
    }
    
    

    展开全文
  • Author: Fox晚上没有加班,打游戏打到9点过,后面就又看了一道《编程之美》的题目《中国象棋将帅问题》。题目:下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且它们不能照面。在象棋残局中,许多高手...

    Author: Fox

    晚上没有加班,打游戏打到9点过,后面就又看了一道《编程之美》的题目《中国象棋将帅问题》。

    题目:下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有“将”和“帅”二子(如图1-3所示)(为了下面叙述方便,我们约定用A表示“将”,B表示“帅”):

    image003.jpg

    A、B二子被限制在己方3×3的格子里运动。例如,在如上的表格里,A被正方形{d10, f10, d8, f8}包围,而B被正方形{d3, f3, d1, f1}包围。每一步,A、B分别可以横向或纵向移动一格,但不能沿对角线移动。另外,A不能面对B,也就是说,A和B不能处于同一纵向直线上(比如A在d10的位置,那么B就不能在d1、d2以及d3)。

    请写出一个程序,输出A、B所有合法位置。要求在代码中只能使用一个变量。

    在纸上画了半天,Soft从台湾给带的长寿都让我抽完了,总算对得起这会儿工夫……

    我的思路大致如下:

    1) 只能使用一个变量nNum ==> 只能使用一个循环,nNum只能用来表示A、B位置的组合,nNum最大为9×9-1=80;

    2) 如何用nNum表示一个A、B位置的组合?

    下图表示A(红色)、B(蓝色)所在位置:

    6

    7

    8

    3

    4

    5

    0

    1

    2

    6

    7

    8

    3

    4

    5

    0

    1

    2

    以nNum%9表示A的位置,nNum/9表示B的位置,如nNum==15,A==6,B==1。

    3) 如何确定A、B位置的合法性?

    规则都指定了,合法性的确定也就很简单了:A%3 != B%3。

    OK,剩下的输出就很简单了,为了好看一点,这里希望直接按题目给的图表示出A、B的位置,如:“A:d10, B:e3”,还有颜色:D。

    A的行号:A/3+8;

    A的列号:A%3+d;

    B的行号:B/3+1;

    B的列号:B%3+d;

    代码如下(注释掉的部分只是为了输出更“漂亮”一点):

    1 #include2 //#include 3 4 //HANDLE hStdout;5 //CONSOLE_SCREEN_BUFFER_INFO csbiInfo;6 //WORD wOldColorAttrs;7 8 int_tmain(intargc, _TCHAR*argv[])9 {10 //hStdout = GetStdHandle(STD_OUTPUT_HANDLE);11 //GetConsoleScreenBufferInfo(hStdout, &csbiInfo);12 //wOldColorAttrs = csbiInfo.wAttributes;13 14 intnNum=81;//nNum表示所有位置(含非法),故nNum = 3 * 3 * 3 * 315 while( nNum--)16 {17 if( nNum%9%3!=nNum/9%3)18 {19 //SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_INTENSITY);20 printf("A:%x%02d", nNum%9%3+0xd, nNum%9/3+8);21 //SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE | FOREGROUND_INTENSITY);22 printf("B:%x%02d", nNum/9%3+0xd, nNum/9/3+1);23 }24 if(!(nNum%9) )25 printf("\n");26 };27 printf("\n");28 //SetConsoleTextAttribute(hStdout, wOldColorAttrs);29 return0;30 }

    输出:

    PS: 刚写完,没有来得及总结更多,急着向LP炫耀。但上面的思路应该比较清晰了,也不管书上的答案了,反正我感觉我这点代码效率应该也不会低到哪儿吧:-)?

    展开全文
  • 解法一: public class Chess_Test {    public static void main(String[] args) throws InterruptedException{  long t1 = System.currentTimeMillis();    Byte i = 81;


    解法一:


    public class Chess_Test {
        
        public static void main(String[] args) throws InterruptedException{
            long t1 = System.currentTimeMillis();
            
            Byte i = 81;
            while(i-- > 0){
                if(i / 9 % 3 == i % 9 % 3)
                    continue;
                System.out.println(String.format("A = %d, B = %d\n", i / 9 + 1, i % 9 + 1));
            }
            System.out.println(System.currentTimeMillis()-t1);
            
        }
    }

    解法二:




    public class Chess_Test2 {
        
        class Point{
            char a;
            char b;
        }
        
        public static void main(String[] args) throws InterruptedException{
            long t1 = System.currentTimeMillis();
            Point p = new Chess_Test2().new Point();
            for(p.a = 1; p.a <= 9; p.a++){
                for(p.b = 1; p.b <= 9; p.b++){
                    if(p.a % 3 == p.b % 3){
                        continue;
                    }
                    System.out.println(String.format("A = %c, B = %c\n", p.a+'0', p.b+'0'));
                }
            }
            System.out.println(System.currentTimeMillis()-t1);
            
        }
    }


    展开全文
  • 编程之美 1.2 中国象棋将帅问题

    千次阅读 2014-02-28 18:31:27
    编程之美 1.2 中国象棋将帅问题 版权所有, 禁止转载, 如有需要, 请站内联系. 本文地址:http://blog.csdn.net/caroline_wendy 题目: A表示“将”, B表示“帅”, 请写出一个程序输出A, B所有合法位置, 使用一个...
  • 列出所有的可能组合:  1将  2  3   4  5  6  7  8  9  1  2  3  4   5   6  7  8  9帅 下面
  • 问题: 现在有一个象棋残局,只剩下将A帅B,AB只能在3x3的格子里横纵移动,而且AB不能照面。 输出A、B的合法位置(要求代码中只使用一个变量)。 问题本身很简单,难度在于只用一个变量。 解法一: 位向量法,利用一...
  • 废话不多说,上代码代码/***************************************************... 编程之美1.2中国象棋将帅的问题 ************************************************************************/#include <stdio.h>/***
  • 题目要求:中国象棋里的将和帅走在各自的九宫格里,相互不能照面,请写一个程序,输出将和帅的所有位置。要求代码里只能使用一个字节的变量。 这道题要出结果很容易,用1到9表示九宫格的9个位置,如图  然后1到...
  • 编程之美中的经典题目解析,《中国象棋将帅问题》,欢迎阅读,绝对受益匪浅
  •  将与帅的走棋规则无需多言,《编程之美》给出一题目:请编写一个程序,输出A、B所有合法位置,要求在代码中只能使用一个变量。  《编程之美》中的实现代码如下: #include &lt;stdio.h&gt; #...
  • 问题描述: 象棋中“将”与“帅”是不能相遇的,而且将帅都是在9宫格内移动,还不能对角线移动。九宫格如下,并编号: 1 2 3 4 5 6 7 8 ...
  • 编程之美 中国象棋将帅问题 位操作

    千次阅读 2011-10-21 21:22:20
    编程之美中1.2节讲了将帅问题问题描述如下: 下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有“将”和“帅”...
  • 用c++实现了CChinaChess类,该类包含了五个方法,除方法5外每个方法对应一种实现思路。方法5实现了用一个变量实现三层循环。
  • 思路:根据规律,将帅所在位置代号差整除3后不等于0的情况下,说明两者不在同一纵列,否则在一纵列。 代码如下:【未写注释】 #include int main() { unsigned char ab; for(ab = 0x11;ab;ab = ab + 0x10) ...
  • //题目:中国象棋将帅问题 //算法要求:A,B(将帅)两子 被限制在己方3*3的格子里运动运动。并且A不能面对B, //请写出一个程序,输出A,B所有的合法位置,要求在代码中只能使用一个变量
  • 今天认真把中国象棋将帅问题看了一遍,确实如其它同学所说—不难,只要自己理解了其中的思想,其他的只是实现方法不一样而已。下面,我也捋一捋自己的想法。 其实分析到用九个数字表示格点位置是关键,这样只需要用...
  • 编程之美1.2, 题目不再重复了,这里主要研究方法二。核心思想就是两重循环分别从1到9,如果两个变量处于同一直线则跳过,不然就打印出两个变量。题目的要求在于只能用一个字节来存储,所以就需要空间上进行巧妙的...
  • 一个将,一个帅,在各自的活动的9个格子里,但是两个人不能面对面,站在同一条直线上 下面两种简单的解法 #include <stdio.h> int main() { unsigned char i = 81;... printf("a:%d,...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 277
精华内容 110
关键字:

编程之美象棋问题