枚举算法的思想,把所有可能的情况全列出
最简单的枚举算法:计算 _3 * 6528 = 3_ * 8265,填入相同的数
for (int i = 1; i < 10; i++) { if((i * 10 + 3) * 6528 == (30 + i) * 8265){ cout << i; } }#:墙 G:敌人 .:空地 Question:输入地图,计算在哪个空地放置炸弹可以消灭最多的敌人
#include<iostream> using namespace std; /* #墙 .空地 G敌人 */ int main() { char a[20][20]; //假设地图大小小于 20 * 20 int m, n; //n 行 m 列 int max = 0; int p, q; cout << "input m, n: "; cin >> m >> n; cout << "input map: " << endl; //读入 n 行字符,即读入地图 for (int i = 0; i < n; i++) { cin >> a[i]; } //双重循环 枚举地图的每一个点 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int sum = 0; //可以消灭的敌人数目 sum int x, y; //若为平地 . 可安放炸弹 if (a[i][j] == '.') { //向上统计可以消灭的敌人数目 x = i; y = j; while (a[x][y] != '#') { if (a[x][y] == 'G') { sum++; } x--; } //向下统计 x = i; y = j; while (a[x][y] != '#') { if (a[x][y] == 'G') { sum++; } x++; } //向左统计 x = i; y = j; while (a[x][y] != '#') { if (a[x][y] == 'G') { sum++; } y--; } //向右统计 x = i; y = j; while (a[x][y] != '#') { if (a[x][y] == 'G') { sum++; } y++; } } if (sum > max) { max = sum; p = i; q = j; } } } cout << "将炸弹放在(" << p << "," << q << ")处,最多可以消灭 " << max << " 个敌人"; return 0; }输入示例:(可以一行一行的复制)
13 13 ############# #GG.GGG#GGG.# ###.#G#G#G#G# #.......#..G# #G#.###.#G#G# #GG.GGG.#.GG# #G#.#G#.#.### ##G...G.....# #G#.#G###.#G# #...G#GGG.GG# #G#.#G#G#.#G# #GG.GGG#G.GG# #############运行结果:
0:6根火柴 1:2根 2:5根 3:5根 4:4根 5:5根 6:6根 7:3根 8:7根 9:6根 +、=:2根 例如:现在小恒手中有 14 根火柴,则可以拼成两个不同的等式 0+1=1 和 1+0=1 (必须用完所有火柴) Question:假设现在小恒手上有 m 根 (m<24) 火柴棍,那么小恒可以拼出多少个不同的形如 A+B=C 的等式呢?(限时 1 秒)
#include<iostream> using namespace std; int fun(int); int main() { int num; cout << "input num: "; cin >> num; num = num - 4; //除去 + 和 = for (int a = 0; a <= 1111; a++) { for (int b = 0; b <= 1111; b++) { int c = a + b; if (fun(a) + fun(b) + fun(c) == num) { cout << a << " + " << b << " = " << c << endl; } } } return 0; } int fun(int x) { int numx = 0; int n[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; //表示 0 ~ 9 需要的火柴数 while (x / 10 != 0) { //统计表示低位所需的火柴总数 numx += n[x%10]; x = x / 10; } numx += n[x]; return numx; }运行结果:
123 的全排列是 123、132、213、231、312、321 Question:输入一个数 n,求 123…n 这个数 的全排列 (n<9)
求 123 的全排列 #include<iostream> using namespace std; int main() { int a, b, c; for (a = 1; a <= 3; a++) { for (b = 1; b <= 3; b++) { for (c = 1; c <= 3; c++) { if (a != b && a != c && b != c) { cout << a << b << c << " "; } } } } return 0; }求 123456789 的全排列
End.