首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

高分算法

2012-03-23 
高分求一个算法什么是穷举算法,请举个例子讲讲[解决办法]举法就是把可能的情况一一列举,带入实际,一个个检

高分求一个算法
什么是穷举算法,请举个例子讲讲

[解决办法]
举法就是把可能的情况一一列举,带入实际,一个个检验是否是符合。这种方法一般在计算机中运用,因为计算机计算速度快,可以很快验证答案是否正确。
比如统计一个班男生身高高于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
这就是穷举
而可以得出这些排列的算法就属于穷举算法
我真的无法再细讲了

热点排行