蓝桥杯C穷举和字符串.pptVIP

  • 4
  • 0
  • 约8.79千字
  • 约 45页
  • 2017-05-29 发布于四川
  • 举报
例1:百钱百鸡问题。 公鸡5文钱1只, 母鸡3文钱1只, 小鸡一文钱3只。 100文钱如何卖100只鸡? ? 条件分析 设买 x 只公鸡,y 只母鸡,z 只小鸡,则有: x+y+z=100 5x+3y+z/3=100 且:x、y、z 都是整数; 0 ≤ x ≤ 20; 0 ≤ y ≤ 33; 0 ≤ z ≤ 99; z%3=0。 ? 基本算法思想, 上述方程属于不定方程,解并不唯一,因此,可 用穷举法对 x、y、z 的所有组合情况,测试满足 条件的解。具体是: ? 把x可能值0~20和y可能值0~33用二重循环来组 合,每个x和y组合都可得到z值,即z=100-x-y, 若x、y、z值使5x+3y+z/3=100成立,则该组x、 y、z即为一组所求值。即: 穷举范围: x : 0~20 , y : 0~33 , z : 100-x-y 判断式: z%3==05*x+3*y+z/3==100 ? 另一方法是:把x可能值0~20、y可能值0~33和z 可能值0~99用三重循环来组合,若x、y、z值使 5x+3y+z/3=100和x+y+z=100同时成立,则该组x、 y、z即为一组所求值。即: 穷举范围: x : 0~20 , y : 0~33 , z : 0~99 判断式: z%3==05*x+3*y+z/3==100x+y+z==100 main( ) { int x, y, z, j=1; printf(Possible solutions to buy 100 fowls whith 100 wen:\n); for (x=0; x=20; x++) for (y=0; y=33; y++) { z=100-x-y; if (z%3==05*x+3*y+z/3==100) { printf(%2d:cock=%-2d hen=%-2d chicken=%-2d\n, j, x, y, z); j++;} } } 例2:打印出所有的“水仙花数”。所谓“水仙花 数”是指一个三位正整数,其各位数字的立方和 等于该数本身,例如:153=13+53+33 。 ? 穷举范围:即把所有的三位正整数100~999按题 意一一进行判断。 ? 判断式:如果一个三位正整数n的百位、十位、 个位上的数字分别为i、j、k,则判断式为: n = i3 + j3 + k3 ? 如何分解三位数n的百位、十位、个位: 百位:i = n/100; 十位:j = ( n/10 )%10; 个位:k = n%10; #include stdio.h main() { int n,i,j,k; for( n=100; n=999; n++ ) { i = n /100; j = ( n / 10 ) % 10 ; k = n % 10 ; if ( n== i*i*i + j*j*j + k*k*k ) printf(%d = %d^3 + %d^3 + %d^3\n, n, i, j, k); } } 运行结果: 153 = 1^3 + 5^3 + 3^3 370 = 3^3 + 7^3 + 0^3 371 = 3^3 + 7^3 + 1^3 407 = 4^3 + 0^3 + 7^3 穷举要点 1.一一列举各种情况,不重复,不遗漏 循环 因此要注意循环的起止 解决问题是 是否存在 和有多少可能的那些,找到具体规则 找到能使程序优化的语句,以便缩小搜索范 围,减少程序运行时间。 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元

文档评论(0)

1亿VIP精品文档

相关文档