蛮力法
蛮力法 1 枚举法 main( ){int x,y,z;for(x=1;x<=20;x=x+1)for(y=1;y<=33;y=y+1){=100-x-y;f(z mod 3=0 and 5*x+3*y+z/3=100)print(“the cock number is”,x); print(“the hen number is”, y); print(“the chick number is “,z);}}} 算法分析:以上算法只需枚举尝试20*33=660次。实现时约束条件限定Z能被3整除时,才判断“5*x+3*y+z/3=100”。这样省去了z不整除3时的算术运算和条件判断,进一步提高了算法效率。 【例3.2】解数字迷 A B C A B × A D D D D D D 算法设计1:按乘法枚举 1)枚举范围为: A:3——9,B:0——9,C:0——9 六位数表示:A*10000+B*1000+C*100+A*10+B,尝试800次。 2)约束条件为: 每次尝试,先求六位数与A的积,再测试积的各位是否相 同,若相同则找到了问题的解。 测试积的各位是否相同比较简单的方法是,从低位开始,每次都取数据的个位,然后整除10,使高位的数字不断变成个位,并逐一比较。 算法1如下: main( ) { int A,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 mod 10; for(i=1; i<=5; i++) { G2=G1; E1=E1/10; G1= E1 mod 10; if(G1<>G2 ) break; } if(i=6) print( F,”*”,A,”=”,E); } } 2 其它范例 2 在某些情况下,需要处理很大的整数,它无法在计算机硬件能直接允许的范围内进行表示和处理。若用浮点数来存储它,只能近似地参与计算,计算结果的有效数字会受到限制。若要精确地表示大整数,并在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的算术运算。请设计一个有效的算法,可以进行两个n位大整数的乘法运算。 数据结构设计:首先用数组存储大整数数据,再将两个乘数和积都按由低位到高位逐位存储到数组元素中。 算法设计:存储好两个高精度数据后,模拟竖式乘法,让两个高精度数据按位交叉相乘,并逐步累加即可得到精确的结果,用二重循环就可实现。 main( ) { long b,c,d; int i,i1,i2,j,k,n,n1,n2,a[256]; char s1[256],s2[256]; input(s1); input(s2); for (i=0;i<255;i++) a[i]=0; n1=strlen(s1); n2=strlen(s2); d=0; for (i1=0,k=n1-1;i10) { i=i+1; a[i]= a[i]+d mod 10; d=d/10;} n=i; } for (i=n;i>=0;i–) print(a[i]); } 【例3.5】狱吏问题 某国王对囚犯进行大赦,让一狱吏n次通过一排锁着的n间牢房,每通过一次,按所定规则转动n间牢
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113643 人正在系统学习中 相关资源:翠雨方工作备忘录工具v2.31中文绿色版-其它代码类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!