算法竞赛入门经典第二版 2-6排列
生活随笔
收集整理的這篇文章主要介紹了
算法竞赛入门经典第二版 2-6排列
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ? ? ? 用1,2,3,...,9組成3個(gè)三位數(shù)abc, def和ghi,每個(gè)數(shù)字恰好使用一次,要求abc:def:ghi = 1:2:3。按照"abc def ghi"的格式輸出所有解,每行一個(gè)解。提示:不必太動(dòng)腦筋。
原理是遍歷所有數(shù)字再進(jìn)行篩選,優(yōu)點(diǎn)是簡(jiǎn)單容易實(shí)現(xiàn),缺點(diǎn)是程序計(jì)算的時(shí)間較長(zhǎng)。
#include <stdio.h> #define A 100 #define B 999 //題目:輸出[1,9]其中三位組成的三位數(shù),abc,def,ghi,每個(gè)數(shù)字恰好使用一次,并且要求abc:def:ghi=1:2:3。 int main(void) {int i,j,k,n,m,boo_l=1; //數(shù)1,數(shù)2,數(shù)3,用于循環(huán)賦值,用于循環(huán)賦值//boo_l用來(lái)假定每一個(gè)數(shù)都是滿足條件的,在往后的判斷中,不符合條件的數(shù)只要改變的boo_l的值就很容易讓程序知道這個(gè)數(shù)符不符合條件 int count[10][2]; //用于計(jì)算[0,9]出現(xiàn)的次數(shù) for(i=A;i<=B;i++) //有三個(gè)數(shù)字,所有三個(gè)循環(huán) for(j=A;j<=B;j++)for(k=A;k<=B;k++){ for(n=0;n<=9;n++){ //初始化計(jì)數(shù)器,用來(lái)篩選帶有重復(fù)數(shù)字的數(shù) count[n][1]=n; //比較對(duì)象 count[n][2]=0; //計(jì)數(shù)器 }if(2*i == j && 3*j==2*k && 3*i == k){ //判斷條件1 for(m=0;m<=9;m++){ //用于統(tǒng)計(jì)i中[0,9]出現(xiàn)的次數(shù) if(i/100==count[m][1])count[m][2]++;if(j/100==count[m][1])count[m][2]++;if(k/100==count[m][1])count[m][2]++;}for(m=0;m<=9;m++){ //同上 if(i/10%10==count[m][1])count[m][2]++;if(j/10%10==count[m][1])count[m][2]++;if(k/10%10==count[m][1])count[m][2]++;}for(m=0;m<=9;m++){ //同上 if(i%100%10==count[m][1])count[m][2]++;if(j%100%10==count[m][1])count[m][2]++;if(k%100%10==count[m][1])count[m][2]++;}for(m=0;m<=9;m++){ //判斷并排除帶有重復(fù)數(shù)字的數(shù) if(count[m][2]>1){boo_l=0;break;} }if(boo_l){ //輸出滿足條件的數(shù)字 printf("boo_l=%d %d %d %d\n",boo_l,i,j,k);}boo_l=1; //重置boo_l的數(shù)值 }} return 0; }? ? ? ? 反思:過(guò)程中用了數(shù)組,按照正常的章節(jié)進(jìn)度,這個(gè)問(wèn)題可以不使用數(shù)組解決,在輸出符合條件的數(shù)字上浪費(fèi)了過(guò)多的調(diào)試時(shí)間,沒(méi)有很好的理解嵌套循環(huán)的原理已經(jīng)其中語(yǔ)句的執(zhí)行方式。
總結(jié)
以上是生活随笔為你收集整理的算法竞赛入门经典第二版 2-6排列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【机器学习】朴素贝叶斯介绍及实例--对短
- 下一篇: 【Python基础入门系列】第09天:P