4

次の文字列を検討してください

abcd

このように2文字順列(デカルト積)を返すことができます

$ echo {a,b,c,d}{a,b,c,d}
aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd

ただし、次のような冗長なエントリを削除したいと思います

ba ca cb da db dc

および無効なエントリ

aa bb cc dd

だから私は残っています

ab ac ad bc bd cd

4

5 に答える 5

1

誰かがawkの1行でこれを行うと確信していますが、ここにbashの何かがあります:

#!/bin/bash
seen=":"
result=""

for i in "$@"
do
    for j in "$@"
    do
        if [ "$i" != "$j" ]
        then
            if [[ $seen != *":$j$i:"* ]]
            then
                result="$result $i$j"
                seen="$seen$i$j:"
            fi
        fi
    done
done
echo $result

出力:

$ ./prod.sh a b c d
ab ac ad bc bd cd

$ ./prod.sh I have no life
Ihave Ino Ilife haveno havelife nolife
于 2014-06-15T06:54:29.900 に答える
0

これは、制限に基づいて、文字に配列を使用して、それを実現するための擬似コードです。

for (i=0;i<array.length;i++)
{
    for (j=i+1;j<array.length;j++)
    {
        print array[i] + array[j]; //concatenation
    }
}
于 2014-06-15T06:53:24.030 に答える