English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

請利用亂數產生一個19x19的矩陣,其內含值為 -1,0,1三個之中取一,也就是矩陣中的元素,不是1,就是0或-1,產生的個數比請依
1:0:-1=1:4:1。最後請寫一函式,用來計算此一矩陣中,1 的最大連線個數(共有4個方向,米字型方向,看4個方向中,那一個方向的連線個數最大,便取其連線之個數)及-1的最大連線個數。

我看到這一題時..傻眼><
謝囉 各位先進

2006-11-12 10:23:15 · 1 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

1 個解答

#include #include #include #define S 19struct M { int x; int y; int l; int d; int t; };int  c[S][S];void prt(void){ int  i, j; char C[] = "* +=|/\\Ll",   T[] = "0123456789ABCDEFGHI"; printf("\\%s", T); for (i=0; i H.l && j == S-1) H.l = n, H.x = j-n,  H.y = i;   } else   { if (n > H.l)    H.l = n, H.x = j-n-1, H.y = i;    o = c[i][j], n = 0; }  } for (V.d=1, V.l=i=0; i V.l && j == S-1) V.l = n, V.x = i,  V.y = j-n;   } else   { if (n > V.l)    V.l = n, V.x = i,  V.y = j-n-1;    o = c[j][i], n = 0; }  } for (U.d=2, U.l=0, i=1; i U.l && k == m) U.l = n, U.x = j, U.y = i;     } else     { if (n > U.l)   U.l = n, U.x = j, U.y = i;      n = 0;  break; } } }  } for (D.d=3, D.l=i=0; ij ? S-i : S-j;    for (n=0, k=1; k<=m; k++)     if (c[i+k][j+k]==t)   n++;     else     { if (n > D.l) D.l = n, D.x = j, D.y = i;      n = 0;  break; } } }  } H.t = V.t = U.t = D.t = t,  H.l++, V.l++, U.l++, D.l++; if (V.l > H.l)  if (D.l > V.l)   if (U.l > D.l)  return U;   else    return D;  else if (U.l > V.l)  return U;   else    return V; else  if (D.l > H.l)   if (U.l > D.l)  return U;   else    return D;  else if (U.l > H.l)  return U;   else    return H;}

2006-11-17 02:47:43 補充:
intmain()
{inti, j, k, l;
structMa[2];
char*d[4]={"Horizontal", "Vertical", "Right-Up", "Right-down"};

srand(l=time(0));
for (i=0; i for (j=0; j k= rand() % (1+4+1),
c[i][j]=k?k==(1+4+1-1)?1:0:-1;

2006-11-17 02:50:24 補充:
system("CLS");
prt();
a[0]= lng(-1);
a[1]= lng( 1);
k= a[0].l < a[1].l;

2006-11-17 02:52:19 補充:
switch (a[k].d)
{case 0:for (i=0; i case 1:for (i=0; i case 2:for (i=0; i
2006-11-17 02:53:48 補充:
case 3:for (i=0; i }

printf("\nLongest happened at (%d, %d) on team % d for %d in direction %s.\n",
a[k].x, a[k].y, a[k].t, a[k].l, d[a[k].d]);
prt();

system("pause");

return 0;
}

2006-11-17 02:58:02 補充:
程式寫得不好,結構改了好幾次;
本來要一次算出一隊(1, -1) 最長的東東,後來改成一次算一隊。
所以,有些東東看起來怪怪的。
本來是用 Turbo C 寫的,可以控制游標,所以想列出兩隊中,橫、直、上下斜的最長線各在哪,其將這最長的以'L'標示出來。
 後來換去 MS-VC,就去掉這功能了!
這是為啥有個
 char C[] = "* +=|/\\Ll",
的原因。

沒時間把它改成完全一致了。
不過,能run 出正確的結果就是了。

小小測試了一下,不知有沒有 bug,我還有自己的功課要趕呢!
您自己再試試!!

2006-11-16 21:46:12 · answer #1 · answered by ? 7 · 0 0

fedest.com, questions and answers