← RoseCode

ROSECODE 200

运行这段 JavaScript

Run it (javascript)

sinan · 数学 ·

原题的交互功能已停用;现存程序以代码文本保留。

/*
See the following pseudo code:

   define global variables ROWS, COLS and COUNT
   define GRID as a ROWS by COLS matrix and initialize it to zero

recursive_function(row=1, col=1, row_max=1)
begin
   set GRID[row, col] to 1
   if col+1 is less than or equal to COLS
   begin // if
      if GRID[row, col+1] is equal to zero; call recursive_function(row, col+1, row_max)
   end // if
   else if row_max is equal to ROWS; add 1 to COUNT

   if row+1 is less than or equal to ROWS and GRID[row+1, col] is equal to zero;
      then call recursive_function(row+1, col, row_max+1)

   if row-1 is greater than zero and GRID[row-1, col] is equal to zero;
      then call recursive_function(row-1, col, row_max)
   set GRID[row, col] to 0
end

main(M,N)
begin
   ROWS=M
   COLS=N
   COUNT=0
   call recursive_function(row=1, col=1, row_max=1)
   return COUNT
end
*/


var ROWS;
var COLS;
var GRID = new Array();
var COUNT;

function recursive_function(row,col,row_max)
{
	GRID[row-1][col-1]=1;
	if(col+1<=COLS){
		if(GRID[row-1][col+1-1]==0) recursive_function(row,col+1,row_max);
	} else if (row_max==ROWS) COUNT++;
	if (row+1<=ROWS && GRID[row+1-1][col-1]==0) recursive_function(row+1,col,row_max+1);
	if (row>1 && GRID[row-1-1][col-1]==0) recursive_function(row-1,col,row_max);
	GRID[row-1][col-1]=0
}
function main()
{
	var M=myform.myM.value;
	var N=myform.myN.value;
	if (M<=0 || M>=10 || N<=0 || N>=10) {
		alert("Should be >0 and <10");
	} else {
		ROWS=M;
		COLS=N;
		COUNT=0;
		for (i=0;i<ROWS;i++){
			GRID[i]=new Array();
			for (j=0;j<COLS;j++){
				GRID[i][j]=0;
			}
		}
		recursive_function(1,1,1);
		outputDiv.innerHTML = "<pre><font size=+2 \><b\>M="+M+", N="+N+"</b\></font\>";
		outputDiv.innerHTML += "<b\>COUNT="+COUNT+"</b\></pre>";
	}
}
这是一个正在运行的 JavaScript 代码。尝试一下并 提交 M=100 和 N=200 的值。 使用以下压缩表示: 前 10 位[剩余位数]后 10 位 例如,对于 2^127,表示为: 1701411834[19]5884105728
M = myM = 5 N = myN = 5