讨论 / superman来
kingoffighters 2008-10-30 06:03:00
点我顶贴 收藏 删除
var ch:char;a:array[1..14] of integer;

sum:longint;

procedure init;

var i:integer;

begin

i:=1;

while i<=4 do

begin

read(ch);

if ch=’A’ then

begin

a[i]:=1;

inc(i);

continue;

end

else if ch=’J’ then begin

a[i]:=11;

inc(i);

continue;

end

else if ch=’Q’ then

begin

a[i]:=12;

inc(i);

continue;

end

else if ch=’K’ then begin

a[i]:=13;

inc(i);

continue;

end

else if (ch=’2’) or (ch=’3’) or (ch=’4’) or (ch=’5’) or (ch=’6’) or (ch=’7’) or (ch=’8’) or (ch=’9’) then begin

a[i]:=ord(ch)-ord(’0’);

inc(i);

continue;

end

else if (ch=’1’) then begin

a[i]:=10;

inc(i);

continue;

end

else continue;

end;

end;

procedure dfs(dep:integer);

var i:integer;

begin

if dep>4 then if sum=24 then

begin

write(’yes’);

halt;

end

else exit;

for i:=1 to 4 do if i=1 then begin

sum:=sum+a[dep];

dfs(dep+1);

sum:=sum-a[dep];

end

else

if i=2 then begin

sum:=sum-a[dep];

dfs(dep+1);

sum:=sum+a[dep];

end

else

if i=3 then begin

sum:=sum*a[dep];

dfs(dep+1);

sum:=sum div a[dep];

end

else

if i=4 then begin

sum:=sum div a[dep];

dfs(dep+1);

sum:=sum*a[dep];

end;

end;

begin

init;

dfs(1);

write(’no’);

end.

过了7组。。。谁帮我看看哪错了?

#1 飞雪天涯@2008-10-28 08:10:00
回复 删除

#include<iostream>

#include<string>

using namespace std;

string card=" A234567890JQK";

int pos[4];bool used[4];

bool dfs_try(int depth,int amount){

if (depth==4){

if (amount==24) return true;

else return false;

}

else{

for (int i=0;i<4;i++)

if (!used[i]){

used[i]=true;

if (dfs_try(depth+1,amount+pos[i])) return true;

if (dfs_try(depth+1,amount-pos[i])) return true;

if (dfs_try(depth+1,amount*pos[i])) return true;

if (/*amount%pos[i]==0&&*/dfs_try(depth+1,amount/pos[i])) return true;

used[i]=false;

}

return false;

}

}

int main (void){

string c;

for (int i=0;i<4;i++){

cin>>c;if (c=="10")c="0";

pos[i]=card.find(c);

used[i]=false;

}

if (dfs_try(0,0)==true) cout<<"yes";

else cout<<"no";

//while(1);

return 0;

}

过了9组

#2 kingoffighters@2008-10-30 06:02:00
回复 删除
var ch:char;a:array[1..14] of integer;sum:real;sum1:integer;

procedure init;

var i:integer;

begin

i:=1;

while i<=4 do

begin

read(ch);

if ch=’A’ then

begin

a[i]:=1;

inc(i);

continue;

end

else if ch=’J’ then begin

a[i]:=11;

inc(i);

continue;

end

else if ch=’Q’ then

begin

a[i]:=12;

inc(i);

continue;

end

else if ch=’K’ then begin

a[i]:=13;

inc(i);

continue;

end

else if (ch=’2’) or (ch=’3’) or (ch=’4’) or (ch=’5’) or (ch=’6’) or (ch=’7’) or (ch=’8’) or (ch=’9’) then begin

a[i]:=ord(ch)-ord(’0’);

inc(i);

continue;

end

else if (ch=’1’) then begin

a[i]:=10;

inc(i);

continue;

end

else continue;

end;

end;

procedure dfs(dep:integer);

var i:integer;

begin

if dep>4 then

begin

sum1:=trunc(sum*100)-trunc(sum)*100;

if sum1=0 then

begin

sum1:=trunc(sum);

if sum1=24 then

begin

write(’yes’);

halt;

end

else exit;

end

else exit;

end;

for i:=1 to 4 do if i=1 then begin

sum:=sum+a[dep];

dfs(dep+1);

sum:=sum-a[dep];

end

else

if i=2 then begin

sum:=sum-a[dep];

dfs(dep+1);

sum:=sum+a[dep];

end

else

if i=3 then begin

sum:=sum*a[dep];

dfs(dep+1);

sum:=sum / a[dep];

end

else

if i=4 then begin

sum:=sum / a[dep];

dfs(dep+1);

sum:=sum*a[dep];

end;

end;

begin

init;

sum:=a[1];

dfs(2);

write(’no’);

end.

这是60分的程序 2,3,4,5过不了 WA

#3 kingoffighters@2008-10-30 06:03:00
回复 删除
谁帮看看啊,感激不尽
查看更多回复
提交回复