1

インタビューストリートチャレンジに問題があります。おそらく、すべての課題の中で最も簡単です。「UnFriendly Numbers」はその名前で、質問は次のようになります。

1 つの友好的な番号と N の非友好的な番号があります。友好的な数を正確に分割し、非友好的な数を分割しない数がいくつあるかを見つけたいと考えています。

入力形式: 入力の最初の行には、スペースで区切られた 2 つの数値 N と K が含まれます。N は友好的でない番号の数、K は友好的な番号です。入力の 2 行目には、スペースで区切られた N 個の不適切な数字が含まれています。

出力形式: 回答を 1 行で出力します。

次のようなPHPプログラミングを行いました。

<?php
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
$handle = fopen ("php://stdin","r");
$input = fgets($handle);
$num_unfriendly_number=substr($input,0,1);
$friendly_number=substr($input,2,1);
$input2=fgets($handle);
for($i=0;$i<=($num_unfriendly_number); $i=$i+2){
    $unfriendly_numbers[$i]=substr($input2,$i,1);

}
//truncates additional input

//now getting divisiors of given friendly numbers

$check_num=1;
//one is always a divisor of any number
$divisior[0]=1;
$arrayindex=1;
for($check_num; $check_num<=$friendly_number; $check_num++){

    $hold_var=$friendly_number%$check_num;
    if($hold_var==0){
        $divisor[$arrayindex]=$check_num;
        $arrayindex++;
    }

}
$index=0;
foreach($divisor as $test_div){
    $output=true;
    foreach($unfriendly_numbers as $test_unfrnd){
        if($test_unfrnd%$test_div){
            $output=false;
        }
    }
    if ($output){
        $outputarray[$index]=$test_div;
        $index++; //edited afterwards after @Boris's suggestion but didn't work :(
    }
}
$num_of_output=count($outputarray);
define('STDOUT',fopen("php://stout","r"));  
fwrite(STDOUT,$num_of_output);
?>

上記のプログラムは 2 つのテストケースでは問題なく動作しましたが、他のテストには適用されませんでした。いくつかの調査を行いましたが、エラーは見つかりませんでした。助けてください。前もって感謝します。

4

2 に答える 2

0

このコードが 16 秒以内に終了できない理由が理解できないのと同じ問題があります。私はあなたのトリックを聞きたいです

a = raw_input()# これはこの行を読み取ります: 8 16 b = raw_input()# これはこの行を読み取ります: 2 5 7 4 3 8 3 18

al = a.split()

bl = b.split()

blint = []

fn = int(al[1])
fnlist = [fn]

half_fn = fn / 2# 時間を節約するために数字を半分にします

k = 1

while k <= half_fn:
    if fn % k == 0:
        fnlist.append(k)
    k += 1

plist = []
for j in bl:
    blint.append(int(j)) # here I changed the bl list elements which are string to int

for i in fnlist:
    for j in blint: #I have the int elements so I don't need every time bring the string and change it to int
        if j % i == 0:
            plist.append(i)
            break
counter = len(fnlist) - len(plist)
print counter
于 2012-04-15T07:15:51.210 に答える