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组。。。谁帮我看看哪错了?
#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组
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