📄 螺旋方阵--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 + -