對(duì)平面魔方的構(gòu)造,分為三種情況:N為奇數(shù)、N為4的倍數(shù)、N為其它偶數(shù)(4n+2的形式)
成都創(chuàng)新互聯(lián)公司專注于安國(guó)企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。安國(guó)網(wǎng)站建設(shè)公司,為安國(guó)等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
⑴ N 為奇數(shù)時(shí),最簡(jiǎn)單
(1) 將1放在第一行中間一列;
(2) 從2開始直到n×n止各數(shù)依次按下列規(guī)則存放:
按 45°方向行走,如向右上
每一個(gè)數(shù)存放的行比前一個(gè)數(shù)的行數(shù)減1,列數(shù)加1
(3) 如果行列范圍超出矩陣范圍,則回繞。
例如1在第1行,則2應(yīng)放在最下一行,列數(shù)同樣加1;
(4) 如果按上面規(guī)則確定的位置上已有數(shù),或上一個(gè)數(shù)是第1行第n列時(shí),
則把下一個(gè)數(shù)放在上一個(gè)數(shù)的下面。
⑵ N為4的倍數(shù)時(shí)
采用對(duì)稱元素交換法。
首先把數(shù)1到n×n按從上至下,從左到右順序填入矩陣
然后將方陣的所有4×4子方陣中的兩對(duì)角線上位置的數(shù)關(guān)于方陣中心作對(duì)
稱交換,即a(i,j)與a(n+1-i,n+1-j)交換,所有其它位置上的數(shù)不變。
(或者將對(duì)角線不變,其它位置對(duì)稱交換也可)
⑶ N 為其它偶數(shù)時(shí)
當(dāng)n為非4倍數(shù)的偶數(shù)(即4n+2形)時(shí):首先把大方陣分解為4個(gè)奇數(shù)(2m+1階)子方陣。
按上述奇數(shù)階魔方給分解的4個(gè)子方陣對(duì)應(yīng)賦值
上左子陣最小(i),下右子陣次小(i+v),下左子陣最大(i+3v),上右子陣次大(i+2v)
即4個(gè)子方陣對(duì)應(yīng)元素相差v,其中v=n*n/4
四個(gè)子矩陣由小到大排列方式為 ① ③
④ ②
然后作相應(yīng)的元素交換:a(i,j)與a(i+u,j)在同一列做對(duì)應(yīng)交換(jt或jn-t+2),
a(t-1,0)與a(t+u-1,0);a(t-1,t-1)與a(t+u-1,t-1)兩對(duì)元素交換
其中u=n/2,t=(n+2)/4 上述交換使每行每列與兩對(duì)角線上元素之和相等。
snjsj 我的程序算法:
這個(gè)魔方陣的算法可以對(duì)除2以外的任意階數(shù)的方陣進(jìn)行輸出,結(jié)果保存在運(yùn)行程序的目錄下面的Magic.txt文件中,用ie或者寫字板打開以保持格式的一致(主要是回車符在記事本中為黑方框,認(rèn)不出來)。當(dāng)然具體的程序中,有內(nèi)存空間以及變量范圍的約束,我試過了,100以內(nèi)的是可以的。
偶數(shù)階的算法都是建立在奇數(shù)階的基礎(chǔ)之上,設(shè)方陣的階數(shù)為n,則魔方陣常數(shù)(即每列每行以及對(duì)角線元素之和)為n*(n*n+1)/2。
請(qǐng)對(duì)照程序代碼看,否則可能看不懂,可以一邊看一邊用筆對(duì)小階的進(jìn)行演算。
先說奇數(shù)階的算法,這是最容易的算法:
n=2*m+1,m為自然數(shù)
1)將數(shù)字1填在(0,(n+1)/2) ;要注意c中是從下標(biāo)0開始
2)從左上往右下依次填。
3)由2),列的下標(biāo)出界(超過n-1)時(shí),行加1,以n為摸的余數(shù)為應(yīng)填的列數(shù);
4)由2),行的下標(biāo)出界(超過n-1)時(shí),列加1,以n為摸的余數(shù)為應(yīng)填的行數(shù);
5)由2),行列都未出界,但已添上其他數(shù),應(yīng)在當(dāng)前位置左橫移一個(gè)位置進(jìn)行填數(shù)。
然后是偶數(shù)階:
分兩種情況,一種是n%4==2,一種是n%4==0
前一種:n=2*(2*m+1),m為自然數(shù)
1)將n階方陣分為四個(gè)小魔方陣ABCD如下排列:
B C
D A
因?yàn)閚*n=4*(2*m+1)*(2*m+1),
記u=n/2=2*m+1,分為1~u*u,u*u+1~2*u*u,2*u*u+1~3*u*u,3*u*u+1~4*u*u
即在調(diào)用子函數(shù)的時(shí)候分別如下面?zhèn)鬟f參數(shù):
A(0),B(u*u),C(2*u*u),D(3*u*u)
分別在ABCD中按照前面的填法把奇數(shù)階填好(注意加上所傳參數(shù)作為基數(shù),每一個(gè)元素都要加上這個(gè)值),最后做如下交換:
(1)B中第0~(m-1)-1行中元素與C中相對(duì)應(yīng)元素交換
(2)D中第(n-1)-m+1~(n-1)共m行的每行中的元素與A中相對(duì)應(yīng)元素交換
(3)交換D:(u+m,m)與A中對(duì)應(yīng)元素(矩陣中心值)
(4)交換D:(n-1,m)與A中對(duì)應(yīng)元素(實(shí)際為矩陣最大值n*n)
所謂對(duì)應(yīng)位置,指相對(duì)于小魔方陣的左頂角的相對(duì)的行列位置
上面的這些你可以用數(shù)學(xué)進(jìn)行證明,利用魔方陣常數(shù)(注意n階的和u階的關(guān)系)
后一種:n=4*m,m為自然數(shù)
因?yàn)樾辛卸际?的倍數(shù),因而可以將整個(gè)矩陣分為每4*4的小矩陣。
先判斷一個(gè)數(shù)是否在劃為4*4小矩陣的對(duì)角線上,
如果在,則填該位置的數(shù)為n*n-i+1(i為該元素的相對(duì)位置,從1開始,比如n階的第s行第t個(gè)元素則其i=s*n+t)
如果不在,則填上i。
1選B,形參的作用域是只能是所定義函數(shù)內(nèi),不是任何函數(shù)
2選C,主函數(shù)main()要么不帶參數(shù)如:main(void),要么帶參數(shù),(參數(shù)的類型是規(guī)定好的)如:main(int argc, char *argv[])
3選C,你只要知道什么叫傳址,就自然明白了
4選A,不解釋,就是C語法規(guī)定
#include?stdio.h
int?main?()
{
int?ad(int);
int?n;
printf("請(qǐng)輸入一個(gè)測(cè)試數(shù):");
while(scanf("%d",n)==1)
if(ad(n))
printf("\t?%d?是??素?cái)?shù).\n",n);
else?
printf("\t?%d?不是素?cái)?shù).\n",n);
return?0;
}
int?ad(int?n)
{
int?flag=1,i;
for?(i=2;i=n/2??flag==1;i++)??//?這里?i=n/2就好了
if(n%i==0)
flag=0;
return?(flag);
}
代碼有點(diǎn)小問題,參看上面的注釋
1.
#include "stdio.h"
main()
{int i,s=0;
int NUM[10]={1,2,3,4,5,6,7,8,9,10} ;
for(i=0;i=9;i++)
{s+=NUM[i];}
printf("%d",s);
}
2.
#include "stdio.h"
main()
{int i,t;
t=1;
i=2;
for(i=1;i=5;i++)/*循環(huán)從1到5*/
{t*=i;}
printf("%d",t);
}
3.
#include stdio.h/*調(diào)用庫函數(shù)*/
void main() /*主函數(shù)*/
{
int i,n,s=0,t=1;/*定義變量*/
for(i=1;i=5;i++) /*for循環(huán),變量i大于1小于n*/
{
t*=i;
s+=t;
}
printf("%d\n",s); /*輸出最后結(jié)果*/
}
好久沒有編程了,嘿嘿 我都運(yùn)行了 好用 都對(duì)的了
你這個(gè)程序有一些問題,應(yīng)該將:
while((ch=getchar())!=EOF)
if(isspace(ch)) state=0;
else if(state==0)
{x++;
state=1;
}
改為
while((ch=getchar())!=EOF)
{ //這里需要加上花括號(hào)
if(isspace(ch)) state=0;
else if(state==0)
{x++;
state=1;
}
} //這里需要加上花括號(hào)
因?yàn)闆]有花括號(hào),所以while((ch=getchar())!=EOF)這一句只管到
if(isspace(ch)) state=0;
這個(gè)其實(shí)是為了跳過單詞前面的空格的
if(isspace(ch)) state=0;
else if(state==0)
如果當(dāng)前讀到的是空格(isspace(ch)返回為非0,if條件成立),
則進(jìn)入if處理分支,進(jìn)行處理,將state賦值為0,
然后繼續(xù)循環(huán)(由于執(zhí)行了if,所以此時(shí)還不會(huì)進(jìn)入else處理分支),
知道讀到非空字符,此時(shí)進(jìn)入else處理,
當(dāng)發(fā)現(xiàn)state為0,則說明,這個(gè)非空字符前一個(gè)字符為空格,
所以說明當(dāng)前這個(gè)字符是單詞的第一個(gè)字母。
涉及到兩個(gè)概念:遞歸調(diào)用、變量作用域
fun函數(shù)中用的w是全局的,值為3
遞歸調(diào)用返回值為5*4*3*2*1*3=360
主函數(shù)定義了w,覆蓋了全區(qū)的,值為10,所以輸出360*10=3600
網(wǎng)站題目:c語言第七章函數(shù)例題 c語言函數(shù)例題講解
分享路徑:http://jinyejixie.com/article36/dochcpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App設(shè)計(jì)、Google、外貿(mào)建站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)