您好,欢迎访问三七文档
1、百钱百鸡问题。中国古代数学家张丘建在《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?#includestdio.hvoidmain(){inta,b,c;for(a=0;a=20;a++)for(b=0;b=33;b++)for(c=0;c=300;c=c+3){if(5*a+3*b+c/3==100&&a+b+c==100)printf(鸡翁%d个鸡母%d个鸡雏%d个\n,a,b,c);}}2、解数字迷ABCAB×ADDDDDD其中A、B、C、D代表各种不同的数字,请找出满足上述条件的ABCAB所代表的数字。#includestdio.hvoidmain(){intA,B,C,D,E,E1,F,G1,G2,i;for(A=3;A=9;A++)for(B=0;B=9;B++)for(C=0;C=9;C++){F=A*10000+B*1000+C*100+A*10+B;E=F*A;E1=E;G1=E1%10;for(i=1;i=5;i++){G2=G1;E1=E1/10;G1=E1%10;if(G1!=G2)break;}if(i==6)printf(%d*%d=%d\n,F,A,E);}}算法设计2:将算式变形为除法:DDDDDD/A=ABCAB。此时只需枚举A:3—9D:1—9,共尝试7*9=63次。每次尝试,测试商的万位、十位与除数是否相同,千位与个位是否相同,都相同时为解。#includestdio.hmain(){intA,B,C,D,E,F;for(A=3;A=9;A++)for(D=1;D=9;D++){E=D*100000+D*10000+D*1000+D*100+D*10+D;if(E%A==0){F=E/A;if(F/10000==A&&F%100/10==A&&F/1000%10==F%10)printf(%d*%d=%d\n,F,A,E);}}}3、贴纸问题,有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。五人对坐,每人都可以看到其他人额头上的纸的颜色。五人相互观察后,A说:“我看见有三人额头上帖的是白纸,一人额头上帖的是黑纸”B说:“我看见其他四人额头上帖的都是黑纸”C说:“我看见有一人额头上帖的是白纸,其他三人额头上帖的是黑纸”D说:“我看见其他四人额头上帖的都是白纸”E说:什么也没有说现在已知额头上帖黑纸的人说的都是谎话,额头上贴白纸的人说的都是实话,请你编写程序,求出这五个人谁的额头上帖的白纸,谁的额头上帖的黑纸。#includestdio.hvoidmain(){intA,B,C,D,E;for(A=0;A2;A++)for(B=0;B2;B++)for(C=0;C2;C++)for(D=0;D2;D++)for(E=0;E2;E++)if((A==0&&B+C+D+E==1)||(A==1&&B+C+D+E!=0))if((B==0&&A+C+D+E==4)||(B==1&&A+C+D+E!=4))if((C==0&&A+B+D+E==3)||(C==1&&A+B+D+E!=3))if((D==0&&A+B+C+E==0)||(D==1&&A+B+C+E!=0)){printf(A头上贴的是%s\n,A==0?白纸:黑纸);printf(B头上贴的是%s\n,B==0?白纸:黑纸);printf(C头上贴的是%s\n,C==0?白纸:黑纸);printf(D头上贴的是%s\n,D==0?白纸:黑纸);printf(E头上贴的是%s\n,E==0?白纸:黑纸);}}4、福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE*?=EDCBA他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把ABCDE所代表的数字写出来。#includestdio.hmain(){inta,b,c,d,e,g;longinti;for(i=10000;i=99999;i++){a=i/10000;b=(i/1000)%10;c=(i/100)%10;d=(i/10)%10;e=i%10;for(g=1;g=9;g++){if((e*10000+d*1000+c*100+b*10+a)==i*g)if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)printf(%d*%d=%d\n,i,g,e*10000+d*1000+c*100+b*10+a);}}}5、在一个国际象棋中的的4*4的棋盘上放置4个皇后,为了使其中的任何2个皇后都不能相互“攻击”,希望寻求4个皇后的安全放置位置。该问题的不能相互“攻击”相当于要求任意两个皇后不能在同一行、同一列或同一斜线上。求解可能的方案及方案数。#includestdio.h#defineN4charboard[N][N];intt;intcol[N];//存储第i行对应的列的值,这样的(i,j)值满足当前棋盘上的皇后不能互相攻击。intsafetyPlace(intx,inty)//(x,y)位置是否安全{inti,j;for(i=0;ix;i++){j=col[i];if(x==i||y==j)return0;if(x-y==i-j||x+y==i+j)//判断左右对角线return0;}return1;}voidget_position(inti)//处在第i行时状态{intw,j;chara[1]={3};if(i==N)//输出棋盘{for(w=0;wN;w++){for(j=0;jN;j++){if(board[w][j]==001)printf(%c,board[w][j]);else{printf(%c,a[0]);printf(%c,board[w][j]);}}printf(\n);}printf(\n);printf(--------------\n);t++;}else{intu;for(u=0;uN;u++){if(safetyPlace(i,u)==1){col[i]=u;//记录下第i行可行的列的位置board[i][u]=001;//放置皇后get_position(i+1);//转换到下一个状态,即下一行col[i]=0;//回溯到当前状态,重置列和棋盘的值board[i][u]=0;}}}}main(){printf(%c是皇后!\n\n,001);get_position(0);printf(一共有%d种方法!\n,t);}
本文标题:蛮力算法题目1
链接地址:https://www.777doc.com/doc-2027937 .html