2011-03-08 5 views
0

2つのドキュメントの数字を一致させるためのPerlプログラムを作成する際に問題があります。documentAに存在するがドキュメントBには存在しない番号を表示する

DOCA:1 2 3 5

は、だから私は

例1の文書Bの文書Aに存在し、存在しない番号を持つようにしたいのは、ドキュメントAがあるとしましょうとB. 6 8 9 10 11 12 13

DocB:1 2 3 4 5 6 7 8 9 10 11

出力:

EDITED

@a=qw(1 2 3 5 6 8 9 10 11 12 13); 
@b=qw(1 2 3 4 5 6 7 8 9 10 11); 
@new=(); 
@new1=(); 
for($i=0;$i<=$#a;$i++) 
{ 
    for($j=0;$j<=$#b;$j++) 
    { 
    if($a[$i] ne $b[$j]) 
    { 
     push(@new,$b[$j]); 
    } 
    } 
} 
+0

上記は私が書いたプログラムですが、答えを得ることができません、どのようにプログラムを修正する – supratim

答えて

0

CPANモジュールArray :: Utilsを使用できます。あなたが必要とするものは次のとおりです:

use Array::Utils qw(:all); 

my @a = qw(1 2 3 5 6 8 9 10 11 12 13); 
my @b = qw(1 2 3 4 5 6 7 8 9 10 11); 

my @diff = array_minus(@a, @b);` 

ところで、あなたのプログラムがうまくいかない理由は、あなたが論理エラーを起こしたためです。値が一致しない毎回@newに値を追加しています。したがって、ループの最初の反復では、aの値とbの値を比較します。値が@bの最初の要素と等しいにもかかわらず、@bの他の10個の要素と等しくないため、これらの要素のすべてが@newに追加されます。私はあなたのループを書き直しました。あなたのコードで使用したCループの代わりにもっと多くのPerlishループがあることに注意してください。

my @a = qw(1 2 3 5 6 8 9 10 11 12 13); 
my @b = qw(1 2 3 4 6 7 8 9 10 11); 
my @new =(); 

for my $a_value (@a) { 
    my $b_not_in_a = 1; 
    INNER: for my $b_value (@b) 
    { if($a_value == $b_value) { 
     $b_not_in_a = 0; 
     last INNER;  } 
    } 

    if ($b_not_in_a) 
    { 
     push(@new,$a_value); 

    } 
} 
+0

ya私は考えてくれてありがとう。 – supratim

0

ハッシュを使用できます。 DOCAを読み、キーとして読み取り番号を使用してハッシュを初期化します。

open(INPUT, "DocA"); 
while (<INPUT>) 
{ 
    chomp; 
    $myhash{$_} = 1; 
} 

その後、DocBとforeachの番号を読んですでにあなたのハッシュに定義されているかどうかを確認:

open(INPUT, "DocB"); 
while (<INPUT>) 
{ 
    chomp; 
    if (not defined $myhash{$_}) 
    { 
     print "$_\n"; 
    } 
} 
  • あなたが持っているこのコードasumes 1行あたりの数。ファイルの形式が異なる場合は、ファイルを変更する必要があります。
  • あなたの番号が発注されていない場合でも、このコードは機能します。
0

例のリストはソートされています。私は彼らがいると仮定しており、宿題なのでモジュールを使用することは許されていません。また、それは宿題なので、私は答えを出しませんが、正しい方向にいくつかのヒントを与えます。

これを手作業で行い、各行の前面を見ることのみが許可されている場合は、どうしますか? Aの頭がBより小さい数の場合、それはどういう意味ですか?それが等しいなら、それはどういう意味ですか?それが大きければ、それはどういう意味ですか?

これで、問題を軽減するために何らかのステップを作成できることから、1つの状況をどのように処理できるかが分かりました。ここで、停止する必要があるときと、その時点での残りの可能性と、ステップで収集した値と停止後の残りの値から回答を得る方法を定義します。極端な例

いくつかの例:

@a = qw(); 
@b = qw(1 2 3); 

@a = qw (1 2 3); 
@b = qw (4 5 6); 

@a = qw(1 3 5); 
@b = qw(2 4 6) 

幸運!

関連する問題