读书人

100分求几个穷举法实例,该怎么处理

发布时间: 2012-03-12 12:45:33 作者: rapoo

100分求几个穷举法实例
我这2天要学懂穷举法以迎接考试
恳求各位给我几个经典例子及C语言代码
感激不尽!!!

[解决办法]
实现n阶魔方

#include <stdio.h>
#define max_size 15

void main()
{
static int square[max_size][max_size];
int i,j,row,col;
int count;
int size;

printf( "Enter the size of the square: ");
scanf( "%d ",&size);
if(size <1||size> max_size+1){
fprintf(stderr, "error! size is out\n ");
return;
}
if(!(size%2)){
fprintf(stderr, "error! size is even\n ");
return;
}

for(i=0;i <size;i++)
for(j=0;j <size;j++)
square[i][j]=0;
square[0][(size-1)/2]=1;
i=0;
j=(size-1)/2;
for(count=2;count <=size*size;count++){
row=(i-1 <0)? (size-1):(i-1);
col=(j-1 <0)? (size-1):(j-1);
if(square[row][col])
i=(++i)%size;
else{
i=row;
j=(j-1 <0)?(size-1):--j;
}
square[i][j]=count;
}
printf( "magic square of size %d : \n\n ",size);
for(i=0;i <size;i++){
for(j=0;j <size;j++)
printf( "%5d ",square[i][j]);
printf( "\n ");
}
printf( "\n\n ");
}


[解决办法]
最简单的:求1到10000当中哪个数等于5000。- -b
[解决办法]
穷举24点算法

#include <stdio.h>
typedef float (__cdecl *TYPE_MYFUN)(float , float );
float FunAdd(float x, float y)
{
return x + y;
}
float FunSub(float x, float y)
{
return (x - y> 0)?x-y:y-x;
}

float FunMul(float x, float y)
{
return x * y;
}
float FunDiv(float x, float y)
{
return x / y;
}
bool operatorFun( float a, float b ,float c ,float d);


int main(int argc, char* argv[])
{
//float Num[4] = { 3 , 3 , 8 , 8 };//答案为 8/(3-8/3) ;
float Num[4] = { 5 , 5 , 5 , 1 };//答案为5/(5-(1/5));
for( int a = 0 ; a < 4 ; a++ ){
for( int b = 0 ; b < 4 ;b++ ){
for( int c = 0 ; c < 4 ; c++ ){
for( int d = 0 ; d < 4 ; d++ ){
if((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d))
continue;
if ( operatorFun(Num[a],Num[b],Num[c],Num[d]) )
return 0;
}
}
}
}
return 0;
}


bool operatorFun( float a, float b ,float c ,float d)
{
static TYPE_MYFUN Fun[4] = { FunAdd ,FunSub , FunMul , FunDiv };
static char op[4] = { '+ ' , '- ' , '* ' , '/ '};

for( int x = 0 ; x < 4 ; x++ ){
for( int y = 0 ; y < 4 ; y++ ){
for( int z = 0 ; z < 4 ; z++ ){
float sum = Fun[z]( Fun[y]( Fun[x](a,b) ,c) ,d);
if( (sum > 23.9)&&(sum <24.1) ){
printf( "((%d%c%d)%c%d)%c%d ",(int)a,op[x] ,(int)b,op[y] ,(int)c,op[z],(int)d);
return true;
}
sum = Fun[z]( Fun[x](a,b) , Fun[y](c ,d) );


if( (sum > 23.9)&&(sum <24.1) ){
printf( "(%d%c%d)%c(%d%c%d) ",(int)a,op[x] ,(int)b,op[z] ,(int)c,op[y],(int)d);
return true;
}
sum = Fun[z]( a , Fun[y](b , Fun[x](c,d) ) );
if( (sum > 23.9)&&(sum <24.1) ){
printf( "%d%c(%d%c(%d%c%d)) ",(int)a,op[z] ,(int)b,op[y] ,(int)c,op[x],(int)d);
return true;
}
}
}
}
return false;
}
[解决办法]
恶人晨星……
[解决办法]
老大,穷举不用算法了,自己编就是了
[解决办法]
学习了
[解决办法]

穷举要什么算法呀,
for(i=...)for(j=...)for(k=...)for(m=...)for(n=...)罗列呗 


[解决办法]
回复人:steedhorse(晨星) ( 三星(高级)) 信誉:141 2007-5-11 1:06:12 得分:0

最简单的:求1到10000当中哪个数等于5000。- -b

==========
UP 确实是最简单的 ...
[解决办法]
输入一个自然数N,求N以内所有素数。


#include <stdio.h>

int main()
{int n;
printf( "请输入自然数: ");
scanf( "%d ",&n);
if (n <=0) {printf( "输入错误 ") ; return -1 ;} //如果输入零或负数程序将直接返回

printf( "%d以内的素数是: ",n);
if (n <=2 && n> 0) printf( "%d, ",1);
if (n==2 && n> 0) printf( "%d, ",2); //如果输入数字为1或2将直接输出结果

if (n> 2)
{printf( "%d,%d, ",1,2); //首先输出1,2
for (int k=3 ; k <=n ;k++) //选择所有满足2 <k <=n的自然数k
for (int i=2 ;i <=k-1 ; i++) //选择除了1和k自身的所有除数i
{if (k % i ==0) break; //如果k能被i整除,则跳出循环选择下一个自然数k
if (i==k-1) printf( "%d, ",k);} //如果所有自然数i都不能整除k,则k为素数,输出k
}
printf ( "\n ");
return 0;
}
[解决办法]
穷举随便编题就行了
例如求使x+y=20的x和y,其中x> 0,y> 0的整数

for(int x=1;x <20;x++)
for(int y=1;y <20;y++)
{
if(x+y==20)
cout < < "x= " < <x < < " " < < "y= " < <y < <endl;
}

读书人网 >C语言

热点推荐