インタビューストリートの挑戦に問題があります。多分、最も簡単なすべての課題です。 "Unfriendly Numbers"は、このような名前と質問です。プログラムで不明なエラー:不幸な数字
フレンドリーナンバーと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つのテストケースのためにうまく働いたが、他のテストのために適用されませんでしたが。私はいくつかの研究を行ったが、何の誤りも見出さなかった。何か助けてください。前もって感謝します。
codereviewがこれに適しているように見えます。 – bdares
使用するアルゴリズムを記述する方が良いでしょう。 –
@PriyankBhatnagar私はブルートフォースが最善の記述だと思います。たぶん私はここで助けることができます:彼はフレンドリーナンバーのすべての除数を見つけて、不親切な数字のいずれかを分割するすべての除数を除外します。 –