永发信息网

Pascal程序转C程序

答案:1  悬赏:50  手机版
解决时间 2021-08-22 01:25
  • 提问者网友:謫仙
  • 2021-08-21 06:09

var

a:array [1..100] of integer;

t,n,p:integer;

function find(k,i:integer):boolean;

var

j:integer;

yes:boolean;

begin

yes:=true;

for j:=1 to k-1 do

if (abs(a[j]-i)=abs(j-k)) or (i=a[j]) then yes:=false;

find:=yes;

end;

procedure print;

var

i:integer;

begin

p:=1;

for i:=1 to n do

write(a[i]:3);

writeln;

inc(t);

end;

procedure try(k:integer);

var

i:integer;

begin

if k>n then print

else

for i:=1 to n do

if find(k,i) then

begin

a[k]:=i;

try(k+1);

end;

if(p=0) and (k=1) and (a[k]=3) then

writeln('no solute!")

end;

begin

p:=0;t=0;

readln(n);

try(1);

writeln('Total=',t);

end.

八皇后问题的程序~那为大侠帮我转换一下谢谢~!!!

最佳答案
  • 五星知识达人网友:夜余生
  • 2021-08-21 07:02

只是简单地把Pascal代码转换成C代码,对程序的算法没有作任何修改。已经测试过了,跟原程序输出完全一致。

#include <stdio.h>
#include <math.h>


int a[100], t, n, p;


int find(int k, int i)
{
int j, yes = 1;
for(j = 0; j < k; j++)
if(abs(a[j] - i) == abs(j - k) || i == a[j])
yes = 0;
return yes;
}


void print()
{
int i;
p = 1;
for(i = 0; i < n; i++)
printf("%3d", a[i]);
printf("\n");
t++;
}


void try(int k)
{
int i;
if(k >= n)
print();
else
for(i = 1; i <= n; i++)
if(find(k, i))
{
a[k] = i;
try(k + 1);
}
if(p == 0 && k == 0 && a[k] == 3)
printf("no solute!\n");
}


int main()
{
p = t = 0;
scanf("%d", &n);
try(0);
printf("total=%d\n", t);
return 0;
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯