- 论坛徽章:
- 0
|
冒昧美化了一下, 方便大家阅读:
-(dearvoid@LinuxEden:Forum)-(~/void/24dot/shell)-
[$$=4016 $?=0] ; cat 24dot.sh
#!/bin/bash
#
# Author: hniu (http://bbs.chinaunix.net/profile-uid-730781.html)
# From : http://bbs.chinaunix.net/thread-1241657-1-1.html
#
if [ $# -ne 4 ]; then
echo "Usage: $(basename $0) d1 d2 d3 d4"
exit 1
fi
awk -v a=$1 -v b=$2 -v c=$3 -v d=$4 '
BEGIN {
n[0] = a;
n[1] = b;
n[2] = c;
n[3] = d;
op[0] = "+";
op[1] = "-";
op[2] = "*";
op[3] = "/";
expr[0] = "(%d %s %d) %s %d %s %d ";
expr[1] = "(%d %s %d %s %d) %s %d ";
expr[2] = " %d %s (%d %s %d) %s %d ";
expr[3] = " %d %s (%d %s %d %s %d)";
expr[4] = " %d %s %d %s (%d %s %d)";
expr[5] = "(%d %s %d) %s (%d %s %d)";
for (ii = 0; ii < 4; ii++)
for(jj = 0; jj < 4; jj++)
for(kk = 0; kk < 4; kk++)
if (ii == jj || jj == kk || ii == kk) {
continue;
} else {
n[ii] = a;
n[jj] = b;
n[kk] = c;
n[6 - ii - jj - kk] = d;
for (one = 0; one < 4; one++)
for (two = 0; two < 4; two++)
for (three = 0; three < 4; three++)
for (iExpr = 0; iExpr < 6; ++iExpr)
printf expr[iExpr] "\n", n[0], op[one], n[1], op[two], n[2], op[three], n[3];
}
}' | sed 'h; s/^/"/; s/$/ = "/; G;' \
| bc -l 2> /dev/null \
| sed -n '/ 23.9999/{s/ 23.9999.*$/ 24/; p;}; / 24.0000/{s/ 24.0000.*/ 24/; p;}; / 24$/p;' \
| sort -u
-(dearvoid@LinuxEden:Forum)-(~/void/24dot/shell)-
[$$=4016 $?=0] ; ./24dot.sh 3 3 7 7
(3 + 3 / 7) * 7 = 24
(3 / 7 + 3) * 7 = 24
7 * (3 + 3 / 7) = 24
7 * (3 / 7 + 3) = 24
-(dearvoid@LinuxEden:Forum)-(~/void/24dot/shell)-
[$$=4016 $?=0] ; bye
|
|