世界十大奇异植物:要PASCAL源程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/18 08:24:20
、A,B,C,D,E五个人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在河边的树丛中找地 方睡着了,日上三竿,E第一个醒来,他将鱼数了数,平分成五分,把多余的一条扔进河中, 拿走一份回家去了,D第二个醒来,他并不知道有人已经走了,照样将鱼平分成五分,又扔 掉多余的一条,拿走自己的一份,接着C,B,A依次醒来,也都按同样的办法分鱼(平分成 五份,扔掉多余的一条,拿走自己的一份),问五人至少合伙捕到多少条鱼。
也许你能用数学办法推出鱼的条数,但我们的要求你编出一个程序,让计算机帮你算出鱼的总数。

#include <stdio.h>
#include <conio.h>

typedef struct _grid99
{
int value[9][9];
char disp[9][9];
} grid99;

char x_status[9][9];
char y_status[9][9];
char z_status[9][9];

typedef struct _list9
{
int value[9];
char disp[9];
} list9;

list9 l;

void print(grid99 * g)
{
int i,j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%c ", g->disp[i][j]);
}
printf("\n");
}
printf("\n");
}

int check(grid99 * g)
{
int i,j,x,y, value;

for(i=0; i<9; i++)
{
value=0;
for(j=0; j<9; j++)
{
value+=g->value[i][j];
}
if (value!=511)
{
return -1;
}
value=0;
for(j=0; j<9; j++)
{
value+=g->value[j][i];
}
if (value!=511)
{
return -1;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
value=0;
for(x=0;x<3;x++)
{
for(y=0;y<3;y++)
{
value+=g->value[i*3+x][j*3+y];
}
}
if (value!=511)
{
return -1;
}
}
}

print(g);

return 0;
}

int f(int a_n)
{
int i, r=1;

for(i=1;i<=a_n;i++)
{
r*=2;
}
return r;
}

void find(grid99 * g, int level)
{
int i, k, x, y, z, id;
if(level>=81)
{
printf("level>=81");
return;
}
x=level/9;
y=level%9;
z=(int)(x/3)*3+(int)(y/3);

for(i=0;i<9;i++)
{
if(x_status[x][i]=='Y' && y_status[y][i]=='Y' && z_status[z][i]=='Y')
{
g->value[x][y]=l.value[i];
g->disp[x][y]=l.disp[i];

x_status[x][i]='N';
y_status[y][i]='N';
z_status[z][i]='N';

if(level==80)
{
check(g);
}
else
{
find(g, level+1);
}
id=g->disp[x][y]-0x30-1;
x_status[x][id]='Y';
y_status[y][id]='Y';
z_status[z][id]='Y';

g->value[x][y]=0;
g->disp[x][y]=0x30;
}
}
}

main()
{
int i,j,k;

grid99 g;
for(i=0; i<9; i++)
{
l.value[i]=f(i);
l.disp[i]=i+0x30+1;
//printf("%c ", l.disp[i]);
//printf("%d ", l.value[i]);
for(j=0; j<9; j++)
{
g.value[i][j]=0;
g.disp[i][j]=0x30;
//printf("%c ", g.disp[i][j]);
//printf("%d ", g.value[i][j]);
}
for(k=0;k<9;k++)
{
x_status[i][k]='Y';
y_status[i][k]='Y';
z_status[i][k]='Y';
}
}

find(&g,0);
}
void main()
{
int i,j,tmp;
int a[9][9];
int row=9,line=9;

for(i=0;i<line;i++)
a[0][i]=i+1;

tmp=a[0][0];
for(i=1;i<row;i++)
{
for(j=0;j<line-1;j++)
a[i][j]=a[i-1][j+1];
a[i][j]=tmp;
tmp=a[i][0];
}
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
printf("%d ",a[i][j]);
printf("\n");
}