0

PHPでtxtファイルを読みました。問題は、そこからスペースを除外できることです。爆発()関数を使用しましたが、機能しません。私はすべての読み方を試しましたが、何も正しくありませんでした。

$a = file_get_contents($file_url, FILE_USE_INCLUDE_PATH);
$a = explode(" ",$a);//When I call this, all of value are added to $a[0] as an array
$a = explode("\n",$a[0]); // I called this to explode "enter" but it doesn't work too

そして、上記のコードを呼び出した後、$a[0] は "85"、$a[1] は "94 16" になります。$a[1][0] を呼び出すと、必要に応じて「94」ではなく「9」になります。

txt ファイルのデータは、IOI 1994 の問題として三角形です。

85
94 16
15 63 72
55 78 89 105
77 24 56 93 17
...

これは私が使用したいファイルですhttp://www.mediafire.com/?kjdjflvf0665q03

そして、これはtxtファイルからのこのデータで問題の三角形を解決するための私のコードです

$t = array();
$count = 0;
$l = strlen($a[0]);
$d = 0;//get the quantity of rows in txt file
while($l>0){
    $d++;
    $l = $l - $d;
}
$f = array();
$prevX = $prevY = $val = 0;
//add all of values to array $t[] as a type: $t[row][col]
for($i =0 ; $i<$d; $i++){
    for($j=0; $j<=$i; $j++){
        $t[$i][$j] = $a[0][$count++];
    }
}
//start the beginning points: $f[row+1][col] = ($t[row+1][col]+MAX(f[row][col],f[row][col-1]),prevX, prevY, $t[row+1][col]) 
$f[0][0] = array($t[0][0],$prevX,$prevY, $t[0][0]);
$f[1][0] = array(($t[1][0]+$f[0][0][0]),0,0,$t[1][0]);
$f[1][1] = array(($t[1][1]+$f[0][0][0]),0,0,$t[1][1]);
$i=2;
while($i<$d){
    for ( $j=0; $j <= $i; $j++ ){
        if(($j-1)<0){//check to except the value which not undefined, but may be not works exactly
            $f[$i][$j] = array(($f[$i-1][$j][0]+$t[$i][$j]),$i-1,$j,$t[$i][$j]);
        }
        else {
            if($j>($i-1)){//check to except the value which not undefined, but may be not works exactly
                $f[$i][$j] = array(($f[$i-1][$j-1][0]+$t[$i][$j]),$i-1,$j-1,$t[$i][$j]);
            }
            else{ 
                if($f[$i-1][$j][0]<$f[$i-1][$j-1][0]){
                    $f[$i][$j] = array(($f[$i-1][$j-1][0]+$t[$i][$j]),$i-1,$j-1,$t[$i][$j]);
                }
                else if($f[$i-1][$j][0]>$f[$i-1][$j-1][0]){
                    $f[$i][$j] = array(($f[$i-1][$j][0]+$t[$i][$j]),$i-1,$j,$t[$i][$j]);
                }
            }
        }
    }
    $i++;
}
//print_r($f);
$result=0;
$x = $y = $finalR = 0;
for($j=0;$j<$d;$j++){
    if($f[$d-1][$j][0]>$result){
        $result = $f[$d-1][$j][0];
        $x = $d-1;
        $y = $j;
        $finalR = $f[$d-1][$j][3];
    }
}
while($x>0){
    echo '(',$x,',',$y,')',$f[$x][$y][3],'<----';
    $x = $f[$x][$y][1];
    $y = $f[$x][$y][2];
}
echo '(0,0)', $f[0][0][3];
4

1 に答える 1

0

$a[1] は文字列で、$a[1] は $a[1][0] にあるため、$a[1] を "94 16" にして $a[1][0] を 94 にすることはできません。配列キーです。

行用と参照テーブル用の 2 つの配列を作成するのは簡単です。

<?
$file = file('file.txt');
foreach($file as $i => $line)
{
    foreach(explode("\t",$line) as $num)
    {
        $num = trim($num);
        if($num!='')
        {
            $a[$i][] = $num;
        }
    }
}
echo '<pre>';
pre($a);

//full rows examples
pre(get_ref('0',$a));
pre(get_ref('1',$a));
pre(get_ref('2',$a));

//individual cells examples
pre(get_ref('0,0',$a));
pre(get_ref('1,0',$a));
pre(get_ref('1,1',$a));
pre(get_ref('2,0',$a));
pre(get_ref('2,1',$a));
pre(get_ref('3,2',$a));

function get_ref($ref,$a)
{
    $ref = explode(',',$ref);
    foreach($ref as $r)
    {
        $a = $a[$r];
    }
    if(is_array($a))
    {
        return(implode("\t",$a));
    }else{
        return($a);
    }

}


function pre($d)
{
    echo '<pre>';
    print_r($d);
    echo '</pre>';
}
?>
于 2013-02-03T08:16:32.123 に答える