資源描述:
《c語言窮舉-習(xí)題參考》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、窮舉法(蠻力法、暴力法)信息科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)陳葉芳真分?jǐn)?shù)遞增序列【例】:求真分?jǐn)?shù)遞增序列統(tǒng)計(jì)分母在區(qū)間[a,b]的最簡真分?jǐn)?shù)(分子小于分母,且分子分母無公因數(shù))共有多少個(gè)?并求這些最簡真分?jǐn)?shù)升序序列中的第k項(xiàng)。(正整數(shù)a,b,k從鍵盤輸入)升序排列后的第k項(xiàng)=c(k)/d(k),數(shù)組c和d分別存儲分子和分母在范圍[a,b]內(nèi)窮舉分母j:對每一個(gè)分母j窮舉分子:a,a+1,…,b1,2,…j-1若分子i與分母j存在大于1的公因數(shù),非最簡,則忽略;否則得一個(gè)最簡真分?jǐn)?shù)c(n)/d(n)。對最簡
2、序列排序最簡真分?jǐn)?shù)n=0;//計(jì)數(shù)for(j=a;j<=b;j++)//窮舉分母for(i=1;i<=j-1;i++)//窮舉分子{for(t=0,u=2;u<=i;u++)if(j%u==0&&i%u==0){t=1;break;}//分子分母有公因數(shù)舍去if(t==0){n++;c[n]=i;d[n]=j;}//找到一個(gè)最簡真分?jǐn)?shù)}}真分?jǐn)?shù)遞增序列for(i=1;i<=n-1;i++)//冒泡排序for(j=1;j<=n-i;j++)if(c[j]*d[j+1]>c[j+1]*d[j]){h=c[j
3、];c[j]=c[j+1];c[j+1]=h;//分子分母同時(shí)交換h=d[j];d[j]=d[j+1];d[j+1]=h;}高斯8皇后問題在國際象棋的8*8方格的棋盤上如何放置8個(gè)皇后,使這8個(gè)皇后不能互相攻擊,即任意兩個(gè)皇后不允許處在同一橫排、同一縱列,也不允許處在同一與棋盤邊框呈45度角的斜線上。高斯8皇后問題一個(gè)解用一個(gè)8位數(shù)表示,第k個(gè)數(shù)字為j,表示第k行的第j格放置一個(gè)皇后高斯8皇后問題條件1.不允許出現(xiàn)在同一橫排、同一縱列:要求8位數(shù)中數(shù)字1~8各出現(xiàn)1次。因此解空間為[12345678,8
4、7654321]。數(shù)字1~8的排列為9的倍數(shù)?循環(huán)步長可優(yōu)化為9。為了判斷數(shù)字1~8在8位數(shù)中各出現(xiàn)1次,設(shè)置f數(shù)組,f(x)統(tǒng)計(jì)數(shù)字x的次數(shù),若f(1)~f(8)均等于1,符合條件。否則測試下一數(shù)據(jù)。高斯8皇后問題條件2.不允許處在同一與棋盤邊框45度角的斜線上,設(shè)置g數(shù)組,若8位數(shù)的第k個(gè)數(shù)字為x(g(k)=x),則要求第j個(gè)數(shù)字與第k個(gè)數(shù)字的絕對值不等于j-k(設(shè)j>k),即:
5、g(j)-g(k)
6、不等于j-kj-k代表什么?g(j)-g(k)代表什么?高斯8皇后問題ints,k,i,j,t,x,
7、f[9],g[9];longa,y;s=0;for(a=12345678;a<=87654321;a+=9){y=a;k=0;for(i=1;i<=8;i++)f[i]=0;//統(tǒng)計(jì)數(shù)字i的次數(shù)while(y>0){x=y%10;f[x]=f[x]++;y=y/10;k++;g[k]=x;}//分離各數(shù)字,用數(shù)組f統(tǒng)計(jì)for(t=0,i=1;i<=8;i++)if(f[i]!=1)t=1;//數(shù)字1~8出現(xiàn)不為1次,返回if(t==1)continue;for(k=1;k<=7;k++)for(j=k+
8、1;j<=8;j++)if(fabs(g[j]-g[k])==j-k)t=1;if(t==1)continue;//45度斜線上,返回s++;//解個(gè)數(shù)統(tǒng)計(jì)}高斯8皇后問題