?? 螺旋方陣--fevernova的博客.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0039)http://fevernova.bokee.com/1428170.html -->
<HTML><HEAD><TITLE>螺旋方陣--Fevernova的博客</TITLE>
</HEAD>
<BODY>
<DIV class=entity>
<H2
class=diaryTitle>螺旋方陣</H2>
<P><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">題目:<SPAN lang=EN-US>Input Height N, printf such pattern:<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>1<SPAN style="mso-spacerun: yes"> </SPAN>2<SPAN style="mso-spacerun: yes"> </SPAN>3<SPAN style="mso-spacerun: yes"> </SPAN>4<SPAN style="mso-spacerun: yes"> </SPAN>5<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>16<SPAN style="mso-spacerun: yes"> </SPAN>17<SPAN style="mso-spacerun: yes"> </SPAN>18<SPAN style="mso-spacerun: yes"> </SPAN>19<SPAN style="mso-spacerun: yes"> </SPAN>6<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>15<SPAN style="mso-spacerun: yes"> </SPAN>24<SPAN style="mso-spacerun: yes"> </SPAN>25<SPAN style="mso-spacerun: yes"> </SPAN>20<SPAN style="mso-spacerun: yes"> </SPAN>7<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>14<SPAN style="mso-spacerun: yes"> </SPAN>23<SPAN style="mso-spacerun: yes"> </SPAN>22<SPAN style="mso-spacerun: yes"> </SPAN>21<SPAN style="mso-spacerun: yes"> </SPAN>8<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>13<SPAN style="mso-spacerun: yes"> </SPAN>12<SPAN style="mso-spacerun: yes"> </SPAN>11<SPAN style="mso-spacerun: yes"> </SPAN>10<SPAN style="mso-spacerun: yes"> </SPAN>9<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">When N=5;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">根據同學的要求,現在公布“螺旋方陣”的<SPAN lang=EN-US>5種解法供同學們參考,希望大家能夠提供更多的不同的解法。<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">以下<SPAN lang=EN-US>3種解法,由9120006班王睿提供。CTC傾聽熱線:sdqdwangrui@263.net。<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">第一種解法:是用等差數列解題。<SPAN lang=EN-US><P></SPAN></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">算法:<SPAN lang=EN-US><P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>1<SPAN style="mso-spacerun: yes"> </SPAN>2<SPAN style="mso-spacerun: yes"> </SPAN>3<SPAN style="mso-spacerun: yes"> </SPAN>4<SPAN style="mso-spacerun: yes"> </SPAN>5<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>16<SPAN style="mso-spacerun: yes"> </SPAN>17<SPAN style="mso-spacerun: yes"> </SPAN>18<SPAN style="mso-spacerun: yes"> </SPAN>19<SPAN style="mso-spacerun: yes"> </SPAN>6<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>15<SPAN style="mso-spacerun: yes"> </SPAN>24<SPAN style="mso-spacerun: yes"> </SPAN>25<SPAN style="mso-spacerun: yes"> </SPAN>20<SPAN style="mso-spacerun: yes"> </SPAN>7<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>14<SPAN style="mso-spacerun: yes"> </SPAN>23<SPAN style="mso-spacerun: yes"> </SPAN>22<SPAN style="mso-spacerun: yes"> </SPAN>21<SPAN style="mso-spacerun: yes"> </SPAN>8<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-spacerun: yes"> </SPAN>13<SPAN style="mso-spacerun: yes"> </SPAN>12<SPAN style="mso-spacerun: yes"> </SPAN>11<SPAN style="mso-spacerun: yes"> </SPAN>10<SPAN style="mso-spacerun: yes"> </SPAN>9<P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">定義行<SPAN lang=EN-US>i列j。從外向內分層,一圈一層。定義r:(r>=1)當前圈為第幾圈。<P></SPAN></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">定義<SPAN lang=EN-US>N:圖形高度<P></SPAN></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">定義<SPAN lang=EN-US>l:當前圈邊長l<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>l(1)=N-1<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>l(r)=N-2*(r-1)-1<P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">設當前圈左上角為開始。定義<SPAN lang=EN-US>d:當前行的方向(上邊為0右邊為1下邊為2左邊為3)<P></SPAN></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">定義<SPAN lang=EN-US>pl:當前圈當前邊距角的長度(向數字小的方向)<P></SPAN></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">定義<SPAN lang=EN-US>a:當前圈共有多少個數字<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>a(r)=4*l(r)=4*(N-2*(r-1))-4<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>公差為-8<P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">從最外圈到當前圈求和:<SPAN lang=EN-US>s(r)=a(1)*r-r*(r-1)/2*(-8)<P></SPAN></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">定義<SPAN lang=EN-US>b:本圈第一個數字<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>b(r)=s(r-1)+1<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>=a(1)*(r-1)-(r-1)*(r-2)/2*(-8)+1<P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">開始計算:<SPAN lang=EN-US><P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>求r:<SPAN style="mso-spacerun: yes"> </SPAN>r=min(i,N-j+1,N-i+1,j)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>求d:<SPAN style="mso-spacerun: yes"> </SPAN>d為(i,N-j+1,N-i+1,j)與r對應,如r如第1個值,則d為第一個值...<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>求pl:<SPAN style="mso-spacerun: yes"> </SPAN>p=(j-r,i-r,N-j+1-r,N-i+1-r)與r對應,如r如第1個值,則d為第一個值...<P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">當前數值<SPAN lang=EN-US>b+l*d+pl<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>Commented by Wang Rui<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">程序如下:<SPAN lang=EN-US><P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">main( )<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">{<SPAN style="mso-tab-count: 1"> </SPAN>int i,j,r,l,b,d,pl,N;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>printf("Input Height:");<SPAN style="mso-tab-count: 1"> </SPAN>/*輸入高度*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>scanf("%d",&N);<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>for (i=1;i<=N;i++)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>{<SPAN style="mso-tab-count: 1"> </SPAN>for (j=1;j<=N;j++)<SPAN style="mso-tab-count: 1"> </SPAN>/*定位到第i行第j列*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>{<SPAN style="mso-tab-count: 1"> </SPAN>r=i;d=0;pl=j-r;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>if (r>N-j+1) {r=N-j+1;d=1;pl=i-r;}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>if (r>N-i+1) {r=N-i+1;d=2;pl=N-j+1-r;}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>if (r>j) {r=j;d=3;pl=N-i+1-r;}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>/*找出圈數,邊的位置,在邊上的位置*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>l=N-2*(r-1)-1;/*邊長*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>b=(4*N-4)*(r-1)-4*(r-1)*(r-2)+1;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>/*本圈開始的數字*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>printf("%4d",b+l*d+pl);/*打印數字*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>printf("\n");<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">第二種解法:<SPAN lang=EN-US>6班班長的解法,這是用幾何方法解的。<P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">main( )<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">{<SPAN style="mso-tab-count: 1"> </SPAN>int i,j,N,c;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>printf("Input N=");<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>scanf("%d",&N);<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>for (i=1;i<=N;i++)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>for (j=1;j<=N;j++)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>{<SPAN style="mso-tab-count: 1"> </SPAN>if (j>=i&&j<=N+1-i||j<=i&&j>=N+1-i)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 4"> </SPAN>if (i<=(N+1)/2)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN><SPAN style="mso-tab-count: 4"> </SPAN>c=(i-1)*(4*N-4*i+3)+j;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 4"> </SPAN>else<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 5"> </SPAN>c=2*(N-i)*(2*i-1)+3*i-j-1;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>else<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 4"> </SPAN>if (j<=(N+1)/2)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 5"> </SPAN>c=4*N*j-4*j*j-i+j+1;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 4"> </SPAN>else<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 5"> </SPAN>c=(N-j)*(4*j-3)+N+i-1;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>printf((j==N)?"%4d\n":"%4d",c);<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE><SPAN style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">第三種解法:用面積解。<SPAN lang=EN-US><P></SPAN></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">main( )<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">{<SPAN style="mso-tab-count: 1"> </SPAN>int i,j,r,l,b,d,pl,N;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>printf("Input Height:");<SPAN style="mso-tab-count: 1"> </SPAN>/*輸入高度*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>scanf("%d",&N);<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>for (i=1;i<=N;i++)<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>{<SPAN style="mso-tab-count: 1"> </SPAN>for (j=1;j<=N;j++)<SPAN style="mso-tab-count: 1"> </SPAN>/*定位到第i行第j列*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>{<SPAN style="mso-tab-count: 1"> </SPAN>r=i;d=0;pl=j-r;<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>if (r>N-j+1) {r=N-j+1;d=1;pl=i-r;}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>if (r>N-i+1) {r=N-i+1;d=2;pl=N-j+1-r;}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>if (r>j) {r=j;d=3;pl=N-i+1-r;}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>/*找出圈數,邊的位置,在邊上的位置*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>l=N-2*(r-1);/*邊長*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>b=N*N-l*l+1;/*用面積計算*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>/*本圈開始的數字*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 3"> </SPAN>printf("%4d",b+(l-1)*d+pl);/*打印數字*/<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 2"> </SPAN>printf("\n");<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1"> </SPAN>}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">}<P></SPAN></P></PRE><PRE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt"> <P></SPAN></P></PRE><PRE style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體; mso-bidi-font-size: 10.0pt">小結:第一種思路比較簡單<SPAN lang=EN-US>,我在知道題目當天下午就將程序調試成功了。第二個程序是兩天后班長給我的,我還沒來得及加注釋。第三個程序是與班長交流時產生的,使算法更簡單。<P></SPAN></SPAN></P></PRE>
<P class=MsoNormal style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體">
<P></SPAN></P>
<P class=MsoNormal style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋體">以下兩種解法由教師完成。<SPAN lang=EN-US>
<P></SPAN></SPAN></P>
<P class=MsoPlainText
style="MARGIN-LEFT: 41.25pt; TEXT-INDENT: -41.25pt; mso-char-indent-count: -3.93; mso-char-indent-size: 10.45pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US>
<P></SPAN></P>
<P class=MsoPlainText
style="MARGIN-LEFT: 47.15pt; TEXT-INDENT: -47.15pt; mso-char-indent-count: -3.93; mso-char-indent-size: 11.95pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
style="FONT-SIZE: 12pt; COLOR: blue; mso-bidi-font-size: 10.0pt">第<SPAN
lang=EN-US>4種解法。
<P></SPAN></SPAN></P>
<P class=MsoPlainText
style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 11.95pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt">分析:首先尋找數字輸出數字和行列的關系。<SPAN
lang=EN-US>
<P></SPAN></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt"><SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>每圈有四個邊,把每邊的最后一個數字算為下邊的開始,最外圈每邊數字個數是n-1個,以后每邊比外邊一邊少兩個數字。
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt"><SPAN
style="mso-spacerun: yes">
</SPAN>因為數字是一行一行輸出的,再分析每行數字的規律。實際沒有的數字有三種規律:位于對角線之間的數字是上半圖增一,下半圖減一。對角線左側的各列,右側比左側增加了一圈數字,例如數字39和它左側的22比較,數字39所在的圈每邊4個數字,左側22加上一圈16個數字在加1就是39。同理,對角線右側的各列,則減少一圈的數字個數。
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt"><SPAN
style="mso-spacerun: yes">
</SPAN>根據以上分析,用兩個對角線將圖形分為四個區域,如下圖所示,圖中黑斜體字為對角線上的數字。
<P></SPAN></P>
<P class=MsoPlainText
style="LINE-HEIGHT: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt; mso-line-height-rule: exactly"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes">
</SPAN><B><SPAN
style="mso-spacerun: yes"> </SPAN></B></SPAN><B><I><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">1</SPAN></I></B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">
</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>2<SPAN
style="mso-spacerun: yes"> </SPAN>3<SPAN
style="mso-spacerun: yes"> </SPAN>4<SPAN
style="mso-spacerun: yes"> </SPAN>5<SPAN
style="mso-spacerun: yes"> </SPAN>6<SPAN
style="mso-spacerun: yes"> </SPAN><I><SPAN
style="mso-spacerun: yes"> </SPAN></I></SPAN><B><I><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">7</SPAN></I></B><I><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體">
<P></SPAN></I></P>
<P class=MsoPlainText
style="TEXT-INDENT: 132pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 11.0; mso-char-indent-size: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt; mso-line-height-rule: exactly"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體">24
</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體"><SPAN
style="mso-spacerun: yes"> </SPAN><B><I>25</I></B></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>26<SPAN style="mso-spacerun: yes">
</SPAN>27<SPAN style="mso-spacerun: yes"> </SPAN>28 <I><SPAN
style="mso-spacerun: yes"> </SPAN></I></SPAN><B><I><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">29</SPAN></I></B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>8
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-INDENT: 132pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 11.0; mso-char-indent-size: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt; mso-line-height-rule: exactly"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體">23<SPAN
style="mso-spacerun: yes"> </SPAN>40<SPAN style="mso-spacerun: yes">
</SPAN></SPAN><B><I><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">41</SPAN></I></B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>42<SPAN style="mso-spacerun: yes">
</SPAN></SPAN><B><I><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">43</SPAN></I></B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>30<SPAN
style="mso-spacerun: yes"> </SPAN>9
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-INDENT: 132pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 11.0; mso-char-indent-size: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt; mso-line-height-rule: exactly"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體">22<SPAN
style="mso-spacerun: yes"> </SPAN>39<SPAN style="mso-spacerun: yes">
</SPAN>48<SPAN style="mso-spacerun: yes"> </SPAN></SPAN><B><I><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">49</SPAN></I></B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>44<SPAN style="mso-spacerun: yes">
</SPAN>31<SPAN style="mso-spacerun: yes"> </SPAN>10
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-INDENT: 132pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 11.0; mso-char-indent-size: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt; mso-line-height-rule: exactly"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體">21<SPAN
style="mso-spacerun: yes"> </SPAN>38<SPAN style="mso-spacerun: yes">
</SPAN></SPAN><B><I><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體">47</SPAN></I></B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體"><SPAN
style="mso-spacerun: yes"> </SPAN>46 </SPAN><B><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋體; mso-fareast-font-family: 黑體"><SPAN
style="mso-spacerun: yes"> </SPAN><I>45</I> </SPAN></B><SPAN lang=EN-US
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -