本帖最後由 禁止進入 於 2019-8-18 16:45 編輯

Python
  1. def Square(size):
  2.         def gen_steps():
  3.                 a = 1
  4.                 b = ((size ** 2) - ((size - 2) ** 2)) % 10

  5.                 for i in range(1, 3 * size - 1):

  6.                         if i > size:
  7.                                 yield str(b)
  8.                                 b -= 1
  9.                                 if b < 0:
  10.                                         b = 9
  11.                         if i <= 2 * size - 2:
  12.                                 yield str(a)
  13.                                 a += 1
  14.                                 if a > 9:
  15.                                         a = 0

  16.         x = gen_steps()
  17.         output = [next(x) for _ in range(size)]
  18.         output += [ '\n{0}{1}{2}'.format(next(x), " " * (size - 2), next(x)) for i in range(size - 2)]
  19.         output += ['\n'] + [ next(x) for _ in range(size)]
  20.         
  21.         print(''.join(output))

  22. Square(5)
複製代碼

TOP

你講得唔清唔楚
可以點幫你姐如果係一個SEQ既問題, 咁應該提供埋打其他數字會係點既情況 ...
gakko 發表於 2019-7-28 15:36



    睇完即刻笑左
最直接既方法
諗都唔使諗

TOP

俾我就開一個n*n嘅array。用最簡單的4個獨立for loop- top,right,bottom,left。 然后第5個for.loop 印result

via HKEPC Reader for Android

TOP

  1. function print_number(x)
  2. {
  3.         var n=x;  //input number
  4.         var tmp = [];

  5.         var i=0;
  6.         var j=0;

  7.         for (i=0; i<n; i++)
  8.                 tmp[i] = [];
  9.                
  10.         i=0;

  11.         var v=1;

  12.         tmp[i][j] = v; //base case: size=1
  13.         j++;
  14.         v++;

  15.         while ((i!=0) || (j!=0 && j<n))        //if not returning to the starting point, loop it
  16.         {
  17.                 if ((i == 0) && (j<n-1))        //top edge
  18.                 {
  19.                         tmp[i][j] = v;
  20.                         j++;
  21.                 }
  22.                 else if ((j==n-1) && (i<n-1))        //right edge
  23.                 {
  24.                         tmp[i][j] = v;
  25.                         i++;
  26.                 }
  27.                 else if ((i==n-1) && (j>0))        //bottom edge
  28.                 {
  29.                         tmp[i][j] = v;
  30.                         j--;
  31.                 }
  32.                 else if ((j==0) && (i>0))        //left edge
  33.                 {
  34.                         tmp[i][j] = v;
  35.                         i--;
  36.                 }
  37.                
  38.                 //increment v
  39.                 if (v == 9)
  40.                         v = 0;
  41.                 else
  42.                         v++;
  43.         }

  44.         //output
  45.         var out_str;
  46.         for        (i=0; i<n; i++)
  47.         {
  48.                 out_str = "";
  49.                 for (j=0; j<n; j++)
  50.                 {
  51.                         if (i==0 || i==n-1 || j==0 || j==n-1)        //if it is the edge, print the value, else print a space
  52.                                 out_str += tmp[i][j];
  53.                         else
  54.                                 out_str += " ";
  55.                 }
  56.                 console.log(out_str);
  57.                
  58.         }
  59. };
複製代碼
Javascript, 可直接開chrome F12 去run, 簡單快捷

路過見到個post, 冇諗過數學pattern, 好直觀咁跟住4條邊順時針寫落個array 再output返出黎
都只係一個while loop就寫左落個array, 加一個nested for loop 黎output
睇返頭幾樓d ching 有point out 個pattern
跟返個pattern既話, 寫array 個loop 都可以慳返, 直接print d value出黎都仲得

TOP

  1. var size=4;
  2. var max_num = (size -1) * 4+1;

  3. for (r=0;r<size;r++){
  4.         var line="";
  5.         for (c=0;c<size;c++){
  6.                 if (r==0){
  7.                         line += (c+1)%10;
  8.                 }else if (r==size-1){
  9.                         line += (max_num - r -c)%10;
  10.                 }else{
  11.                         line = ((max_num - r)%10) + " ".repeat(size-2) + ((size+r)%10);
  12.                         break;
  13.                 }
  14.         }
  15.         console.log(line);

  16. }
複製代碼
Javascript, 可直接開chrome F12 去run, 簡單快捷

路過見到個post, 冇諗過數學pattern, 好直觀咁跟住4條邊 ...
dptinker 發表於 2019-9-25 10:09

TOP