2009-04-15
PHP vol.9
- 制作「ソート」
問題1
数字を並び替えよ。以下の例のように。
$list = array(9,2,6,3,1,5,7,8,4);
↓
$result = array(1,2,3,4,5,6,7,8,9);
回答
<?php $list = array(9,2,6,3,1,5,7,8,4); echo "前:"; foreach ($list as $value) { echo $value.","; } echo "\n"; for ($k=0; $k < 8;$k++) { for ($i=0; $i < 8;$i++) { if ($list[$i] > $list[$i+1]) { $vb = $list[$i]; $list[$i] = $list[$i+1]; $list[$i+1] = $vb; } } } echo "後:"; foreach ($list as $value) { echo $value.","; } echo "\n";
実行結果
$ php 041501.php 前:9,2,6,3,1,5,7,8,4, 後:1,2,3,4,5,6,7,8,9,
ハマったところ
並び替え処理にforeach文を使ったら$list[$i]の数字と
arrayから取り出した$valueと異なったのではまった。
どんなソースではまったかも晒したいと思います。
<?php $list = .... //省略 foreach ($list as $value) { for($i=0;$i < 8$i++;) { if ($value > $list[$i+1]) { $vb = $list[$i]; $list[$i] = $list[$i+1]; $list[$i+1] = $vb; } } } var_dump($list);
問題2
randでランダムに出力する数字を100個arrayに収容し並び替えよ。
<?php for ($i =0;$i <100;$i++) { $list[$i] = rand(1,100); } for ($k =0;$k< 100;$k++) { for ($n =0; $n <99;$n++) { $m = $n + 1; if ($list[$n] > $list[$m]) { $box = $list[$n]; $list[$n] = $list[$m]; $list[$m] = $box; } } } foreach ($list as $value) { echo $value.","; } echo "\n";
問題3
学籍番号 => 得点になっている。
1クラス100人 0-99,100-199みたいな感じでクラスが分かれる。
クラス毎の平均点を出し、どのクラスが一番平均点が高いか答えよ。
回答
<?php $list = array(0=>80, 1=>21, 2=>39, 3=>56, 4=>66, 5=>79, 6=>27, 7=>70, 8=>66, 9=>33, 10=>57, 11=>31, 12=>72, 13=>95, 14=>56, 15=>35, 16=>61, 17=>63, 18=>47, 19=>65, 20=>40, 21=>84, 22=>49, 23=>58, 24=>20, 25=>63, 26=>46, 27=>42, 28=>33, 29=>91, 30=>87, 31=>94, 32=>92, 33=>25, 34=>49, 35=>58, 36=>85, 37=>56, 38=>27, 39=>50, 40=>70, 41=>65, 42=>62, 43=>41, 44=>59, 45=>98, 46=>57, 47=>100, 48=>61, 49=>84, 50=>65, 51=>81, 52=>68, 53=>95, 54=>39, 55=>69, 56=>57, 57=>66, 58=>91, 59=>71, 60=>56, 61=>77, 62=>65, 63=>48, 64=>82, 65=>95, 66=>86, 67=>67, 68=>51, 69=>93, 70=>97, 71=>20, 72=>58, 73=>58, 74=>42, 75=>97, 76=>55, 77=>79, 78=>97, 79=>96, 80=>63, 81=>62, 82=>77, 83=>30, 84=>56, 85=>97, 86=>80, 87=>94, 88=>62, 89=>70, 90=>64, 91=>99, 92=>47, 93=>29, 94=>46, 95=>29, 96=>23, 97=>31, 98=>76, 99=>54, 100=>24, 101=>72, 102=>55, 103=>62, 104=>30, 105=>77, 106=>59, 107=>66, 108=>56, 109=>55, 110=>62, 111=>100, 112=>97, 113=>39, 114=>30, 115=>52, 116=>35, 117=>90, 118=>45, 119=>78, 120=>59, 121=>90, 122=>76, 123=>86, 124=>99, 125=>21, 126=>95, 127=>22, 128=>33, 129=>70, 130=>56, 131=>38, 132=>42, 133=>91, 134=>80, 135=>53, 136=>68, 137=>38, 138=>99, 139=>23, 140=>74, 141=>61, 142=>22, 143=>70, 144=>80, 145=>32, 146=>22, 147=>95, 148=>22, 149=>48, 150=>73, 151=>61, 152=>38, 153=>48, 154=>47, 155=>37, 156=>50, 157=>42, 158=>39, 159=>64, 160=>93, 161=>75, 162=>82, 163=>35, 164=>66, 165=>62, 166=>68, 167=>33, 168=>81, 169=>67, 170=>37, 171=>54, 172=>27, 173=>40, 174=>24, 175=>87, 176=>53, 177=>27, 178=>82, 179=>55, 180=>55, 181=>54, 182=>97, 183=>74, 184=>83, 185=>43, 186=>91, 187=>33, 188=>66, 189=>29, 190=>77, 191=>58, 192=>85, 193=>59, 194=>73, 195=>50, 196=>20, 197=>40, 198=>64, 199=>81, 200=>87, 201=>82, 202=>35, 203=>95, 204=>22, 205=>39, 206=>81, 207=>56, 208=>46, 209=>63, 210=>92, 211=>82, 212=>98, 213=>88, 214=>55, 215=>80, 216=>31, 217=>45, 218=>94, 219=>77, 220=>55, 221=>71, 222=>35, 223=>39, 224=>29, 225=>88, 226=>70, 227=>30, 228=>28, 229=>34, 230=>91, 231=>96, 232=>97, 233=>25, 234=>90, 235=>99, 236=>45, 237=>71, 238=>55, 239=>71, 240=>33, 241=>46, 242=>53, 243=>30, 244=>34, 245=>88, 246=>91, 247=>45, 248=>33, 249=>84, 250=>22, 251=>68, 252=>54, 253=>37, 254=>88, 255=>64, 256=>25, 257=>58, 258=>74, 259=>33, 260=>72, 261=>65, 262=>28, 263=>68, 264=>70, 265=>98, 266=>67, 267=>96, 268=>68, 269=>22, 270=>66, 271=>82, 272=>48, 273=>100, 274=>93, 275=>62, 276=>87, 277=>83, 278=>88, 279=>20, 280=>67, 281=>91, 282=>69, 283=>21, 284=>28, 285=>56, 286=>65, 287=>33, 288=>94, 289=>39, 290=>46, 291=>66, 292=>84, 293=>54, 294=>34, 295=>54, 296=>52, 297=>81, 298=>49, 299=>20, 300=>83, 301=>96, 302=>82, 303=>31, 304=>95, 305=>75, 306=>74, 307=>82, 308=>58, 309=>62, 310=>82, 311=>24, 312=>52, 313=>50, 314=>26, 315=>61, 316=>87, 317=>71, 318=>74, 319=>80, 320=>90, 321=>100, 322=>46, 323=>74, 324=>54, 325=>60, 326=>27, 327=>86, 328=>41, 329=>56, 330=>86, 331=>24, 332=>52, 333=>68, 334=>35, 335=>46, 336=>42, 337=>90, 338=>27, 339=>80, 340=>51, 341=>90, 342=>85, 343=>84, 344=>39, 345=>91, 346=>44, 347=>25, 348=>61, 349=>98, 350=>86, 351=>51, 352=>98, 353=>32, 354=>24, 355=>51, 356=>72, 357=>32, 358=>37, 359=>93, 360=>69, 361=>22, 362=>98, 363=>20, 364=>70, 365=>32, 366=>47, 367=>92, 368=>22, 369=>55, 370=>72, 371=>53, 372=>44, 373=>56, 374=>37, 375=>64, 376=>46, 377=>61, 378=>70, 379=>88, 380=>59, 381=>56, 382=>38, 383=>57, 384=>68, 385=>43, 386=>89, 387=>39, 388=>56, 389=>25, 390=>32, 391=>24, 392=>27, 393=>29, 394=>25, 395=>78, 396=>42, 397=>52, 398=>70, 399=>45, 400=>88, 401=>41, 402=>78, 403=>31, 404=>77, 405=>96, 406=>75, 407=>22, 408=>57, 409=>45, 410=>90, 411=>96, 412=>81, 413=>28, 414=>53, 415=>48, 416=>51, 417=>41, 418=>68, 419=>88, 420=>47, 421=>81, 422=>92, 423=>54, 424=>91, 425=>98, 426=>32, 427=>33, 428=>50, 429=>82, 430=>58, 431=>37, 432=>22, 433=>35, 434=>48, 435=>79, 436=>31, 437=>23, 438=>81, 439=>68, 440=>48, 441=>71, 442=>63, 443=>28, 444=>79, 445=>97, 446=>57, 447=>30, 448=>37, 449=>24, 450=>98, 451=>64, 452=>85, 453=>90, 454=>99, 455=>76, 456=>87, 457=>30, 458=>89, 459=>37, 460=>93, 461=>46, 462=>54, 463=>95, 464=>62, 465=>83, 466=>74, 467=>73, 468=>87, 469=>55, 470=>40, 471=>34, 472=>25, 473=>84, 474=>43, 475=>84, 476=>80, 477=>81, 478=>95, 479=>98, 480=>85, 481=>92, 482=>62, 483=>70, 484=>82, 485=>60, 486=>45, 487=>69, 488=>71, 489=>34, 490=>86, 491=>64, 492=>60, 493=>39, 494=>58, 495=>21, 496=>21, 497=>31, 498=>74, 499=>89, 500=>67, 501=>94, 502=>23, 503=>72, 504=>78, 505=>46, 506=>56, 507=>57, 508=>27, 509=>50, 510=>54, 511=>93, 512=>42, 513=>96, 514=>62, 515=>23, 516=>56, 517=>88, 518=>72, 519=>27, 520=>21, 521=>57, 522=>71, 523=>62, 524=>77, 525=>29, 526=>63, 527=>79, 528=>41, 529=>37, 530=>67, 531=>88, 532=>31, 533=>70, 534=>59, 535=>89, 536=>97, 537=>96, 538=>45, 539=>23, 540=>45, 541=>80, 542=>96, 543=>68, 544=>76, 545=>58, 546=>72, 547=>32, 548=>45, 549=>44, 550=>39, 551=>47, 552=>82, 553=>91, 554=>89, 555=>58, 556=>100, 557=>52, 558=>36, 559=>41, 560=>69, 561=>84, 562=>28, 563=>80, 564=>53, 565=>68, 566=>69, 567=>49, 568=>64, 569=>94, 570=>53, 571=>89, 572=>74, 573=>48, 574=>57, 575=>49, 576=>86, 577=>28, 578=>61, 579=>31, 580=>53, 581=>81, 582=>59, 583=>34, 584=>71, 585=>48, 586=>72, 587=>71, 588=>80, 589=>89, 590=>93, 591=>49, 592=>72, 593=>21, 594=>28, 595=>25, 596=>69, 597=>77, 598=>55, 599=>32); //学籍番号 => 得点になっている。 //1クラス100人 0-99,100-199みたいな感じでクラスが分かれる。 //クラス毎の平均点を出し、どのクラスが一番平均点が高いか答えよ。 $class = array(); foreach ($list as $key => $value) { if($key <= 99) { $class[0] += $value; } elseif ($key >= 100 && $key <=199 ) { $class[1] += $value; } elseif ($key >= 200 && $key <= 299) { $class[2] += $value; } elseif ($key >= 300 && $key <= 399) { $class[3] += $value; } elseif ($key >= 400 && $key <= 499) { $class[4] += $value; } else { $class[5] += $value; } } for ($h=0;$h<=5;$h++) { $heikin[$h] = $class[$h]/100; } echo "[1]".$heikin[0]."[2]".$heikin[1]."[3]".$heikin[2]."[4]".$heikin[3]."[5]".$heikin[4]."[6]".$heikin[5]."\n"; for ($k=0;$k<5;$k++) { for ($i=0;$i<5;$i++) { $n = $i + 1; if ($heikin[$i] > $heikin[$n]) { $box = $heikin[$i]; $heikin2[$i] = $heikin[$n]; $heikin2[$n] = $box; } } } echo "最高得点:".$heikin2[5]."\n";
実行結果
$ php 041505.php [1]62.75[2]58.28[3]61.13[4]58.45[5]62.84[6]60.49 最高得点:62.84
Copyright © crazyup. All rights reserved.


