【原创】12 球用天平称三次找“次品”

[QUOTE=dearvoid]没有 indent 的 code 真的很难看懂的, 能否 format 一下[/QUOTE]
对不起版主.我学的太少了.

请问版主,如果你要编一个脚本程序,
程序目的:通过键盘输出3个数,然后用"if "条件语句编一个3个数里找出不同的那个数,在输出到屏幕.
的这样一个脚本.
你会怎么编?
:confused: :confused: :confused:      
复制内容到剪贴板
代码:
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]cat foo.sh
#! /bin/bash

v1=$1
v2=$2
v3=$3
if [ $v1 = $v2 ]; then
    if [ $v1 != $v3 ]; then
        echo $v3
    else
        echo "NO EQUAL"
    fi
elif [ $v1 = $v3 ]; then
    echo $v2
elif [ $v2 = $v3 ]; then
    echo $v1
else
    echo "NO EQUAL"
fi
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]./foo.sh 1 1 2
2
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]./foo.sh 1 2 1
2
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]./foo.sh 2 1 1
2
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]./foo.sh 1 2 3
NO EQUAL
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]./foo.sh 1 1 1
ALL EQUAL
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[8599 0] # [/color]o
      
[B]非常感谢版主;[/B]

我在试试.      
#!/bin/bash
# test.1
echo 'hao1:'
read hao1
echo 'hao2:'
read hao2
echo 'hao3:'
read hao3
echo 'hao4:'
read hao4
echo 'hao5:'
read hao5
echo 'hao6:'
read hao6
echo 'hao7:'
read hao7
echo 'hao8:'
read hao8
echo 'hao9:'
read hao9
echo 'hao10:'
read hao10
echo 'hao11:'
read hao11
echo 'hao12:'
read hao12
let d11=$hao1+$hao2+$hao3+$hao4
let d12=$hao5+$hao6+$hao7+$hao8
echo '1-4qiu:5-8qiu'
if [ d11 -gt $d12 ]; then #(1,2,3,4)大于(5,6,7,8)
echo '(1,2,3,4)球重'
echo '(1,2,5)球比(3,6,9)球'
let d21=$hao1+$hao2+$hao5
let d22=$hao3+$hao6+$hao9
if [ $d21 -gt $d22 ]; then #(1,2,5)球比(3,6,9)球重
echo '(1,2,5)球重'
echo '1球比2球'
if ["$hao1" -gt "$hao2"]; then #1球比2球重
echo '1球重'
if ["$hao1" -eq "$hao2"]; then #1球比2球相同
echo '6球轻'
else #1球比2球轻
echo '2球重'
fi


elif [ $d21 -eq $d22 ]; then #(1,2,5)球比(3,6,9)球相同
echo '(1,2,5)球比(3,6,9)球相同'
echo '7球比8球'
if [ $hao7 -gt $hao8 ]; then #7球比8球重
echo '8球轻'
if ["$hao7" -eq "$hao8"]; then #7球比8球相同
echo '4球重'
else #7球比8球轻
echo '7球轻'
fi

else #(1,2,5)球比(3,6,9)球轻
echo '(1,2,5)球比(3,6,9)球轻'
echo '1球比3球'
if [ $hao1 -gt $hao3 ]; then #1球比3球重
echo '输入错误'
if ["#hao1" -eq "$hao3"]; then #1球比3球相同
echo '5球轻'
else #1球比3球轻
echo '3球重'
fi
else
if [ $d11 -eq $d12 ]; then #(1,2,3,4)比(5,6,7,8)相同
echo '(1,2,3,4)比(5,6,7,8)相同'
echo '(9,10)球比(1,11)球'
let p21=$hao9+$hao10
let p22=$hao1+$hao11
if ["$p21" -gt "$p22"]; then #(9,10)球比(1,11)球重
echo '(9,10)球比(1,11)球重'
echo '9球比11球'
if ["$hao9" -gt "$hao11"]; then #9球比11球重
echo '9球重'
if ["$hao9" -eq "$hao11"]; then #9球比11球相同
echo '10球重'
else #9球比11球轻
echo '10球轻'
fi
fi
elif ["$p21" -eq "$p22"]; then #(9,10)球比(1,11)球相同
echo '(9,10)球比(1,11)球相同'
echo '1球比12球'
if ["$hao1" -gt "$hao12"]; then #1球比12球重
echo '12球轻'
if ["$hao1" -eq "$hao12"]; then #1球比12球相同
echo '输入错误'
else #1球比12球轻
echo '12球重'
fi
else #(9,10)球比(1,11)球轻
echo '(9,10)球比(1,11)球轻'
echo '9球比10球'
if [ $hao9 -gt $hao10 ]; then #9球比10球重
echo '10球轻'
if [ $hao9 -eq $hao10 ]; then #9球比10球重相同
echo '11球重'
else #9球比10球轻
echo '9球轻'
fi

else
echo '(1,2,3,4)球轻'
echo '(1,2,5)球比(3,6,9)'
if [ d21 -gt $d22 ]; then #(1,2,5)球比(3,6,9)球重
echo '(1,2,5)球比(3,6,9)球重'
echo '1球比3球'
if [ $hao1 -gt $hao3 ]; then #1球比3球重
echo '3球轻'
if [ $hao1 -eq $hao3 ];then #1球比3球相同
echo '5球重'
else #1球比3球轻
echo '输入错误'
fi
elif [ $d21 -eq $d22 ]; then #(1,2,5)球比(3,6,9)球相同
echo '(1,2,5)球比(3,6,9)球相同'
echo '7球比8球'
if [ $hao7 -gt $hao8 ]; then #7球比8球重
echo '7球重'
if ["$hao7" -eq "$hao8"]; then #7球比8球相同
echo '4球轻'
else #7球比8球轻
echo '8球重'
fi
else #(1,2,5)球比(3,6,9)球轻
echo '1球比2球'
if [ $hao1 -gt $hao2 ]; then #1球比2球重
echo '2球轻'
if["$hao1" -eq "$hao2"]; then #1球比2球相同
echo '6球重'
else #1球比2球轻
else '1球轻'
fi



请版主多多指教!!!谢谢!!!我都要       
求各位版主帮帮忙啊.???:confused: :confused: :confused:       
能否将你的 script 格式整理一下? (具体方法请参阅[thread=108834]本版置顶的帖子[/thread])      
先把思路整理清晰了,不难实现
首先定义一下正常球的重量

12个球按 5 5 2分成三部分 (5那部分再按照2 2 1分)
三次肯定可以找到次品

if else肯定可以实现的,刚用php测试一下      
12球称3次可以实现!      
愿闻其详。三个球又需要称几次呢?四个呢?      
我的想法是:
比如球的序号是1--12。
首先 平均分成3组,每组4个。
第一次:先称1234和5678
            若相等,则在后四个里,9,10,11,12
第二次: 先把9球拣出,从前8个里拿一个补充。再称。
             若相等,则9球既是,可用其他任意球与之比较(第三次),得出结果。
             若不等,假设 1+10< 11+12,则
第三次: 称11和12 的关系。
             若11<12,则12球是假,且假球重。
             若11=12,则10为假,且轻。
             同理:反之第二次中,若1+10> 11+12,在第三次时称11和12 关系,
             若11>12,  则假球为12,且轻。。。。。。
当在第一次称时,结果为:
             1234<5678,则说明9--12均为真球
             把12捡出,改变两边的球组为
            538和674
再称第二次:
             若538<476,则假球必在3,7,6中,再称
第三次:
             若7<6则假球为6且重;若相等,则假球为3,且轻。
             当第二步时538>476.同理也能得出结果。
             当第二步时538=476,说明假球在1,2中,且假球轻。称1和2关系后,可判      
             断出结果!

至于用shell如何实现,我也刚开始学习linux,不太熟练,大家一起想想。觉得不应该很难:)