高分求一个算法
什么是穷举算法,请举个例子讲讲
[解决办法]
举法就是把可能的情况一一列举,带入实际,一个个检验是否是符合。这种方法一般在计算机中运用,因为计算机计算速度快,可以很快验证答案是否正确。
比如统计一个班男生身高高于1.7m的人数,用穷举法就是依次测量每个男生身高,高于1.7m的就记下,直到每个人都量测了一边。
[解决办法]
/*
打印出0到100内能被15整除的数
*/
void main()
{
cout < < "穷举 " < <endl;
for (int i = 0; i <= 100; ++i)
{
if (i % 15 == 0)
cout < <i < <endl;
}
cout < < "非穷举 " < <endl;
for (int i = 0; ;i++)
{
int r = i * 15;
if (r > 100)
break;
cout < <r < <endl;
}
}
[解决办法]
那就先说什么是水仙花数
水仙花数:是指一个3位数,其各位(即:个,十,百位)数字的立方和等于该数本身。例如,153 是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3
在算这个的时候很自然的会想到用三层循环来实现,因为个位,十位,百位上的数都是由0-9的数字组成的。首先通过:
for(int a=1;a <10;a++){
for(int b=0;b <10;b++){
for(int c=0;c <10;c++){
printf( "%d%d%d\n ",a,b,c);
}
}
}
这三个嵌套循环我们可以得到所有的三位数对应的个位十位百位,这就是所有的可能事件。
因为加了条判断语句变成:
int main()
{
for(int a=1;a <10;a++){
for(int b=0;b <10;b++){
for(int c=0;c <10;c++){
if (a*100+b*10+c==a*a*a+b*b*b+c*c*c) // 对于每个可能事件我们都会对它做一个判断,看它们的立方和是否就等于他们所组成的这个三位数,若等!那么这个数就是一个满足条件的,也就是一个水仙花数。
printf( "%d%d%d\n ",a,b,c);
}
}
}
return 0;
}
[解决办法]
一个简单例子
a可以取三个值123
b可以取三个值456
c可以取三个值789
那么穷举出“abc”的所有可能取值,就是:
147 148 149
157 158 159
167 168 169
247 248 249
257 258 259
267 268 269
347 348 349
357 358 359
367 368 369
这就是穷举
而可以得出这些排列的算法就属于穷举算法
我真的无法再细讲了