ROSECODE 200
运行这段 JavaScript
Run it (javascript)
原题的交互功能已停用;现存程序以代码文本保留。
/*
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