亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

給定輸入整數、級別大小和每個級別的點數,計算獲取的點數

給定輸入整數、級別大小和每個級別的點數,計算獲取的點數

PHP
largeQ 2023-09-22 14:34:41
我有一項任務,必須根據值達到的“級別”數量來計算“賺取的積分”數量。假設每個級別的增量范圍為 5。換句話說,如果$x = 5這意味著:1 級為 1、2、3、4、5,2 級為 6、7、8、9、10 等每次輸入值 ( $a) 進入一個新級別,$y = 10都會獲得 10 分 ( )。如果$a是2,則該數字屬于第一個范圍,因此可以獲得10積分。而且,$a = 5賺了10,$a = 7賺了20,還$a = 12賺了30。我已經使用 while 循環編寫了一些代碼,但由于時間復雜性,我不想使用 while 循環。$a = 11;$x = 5;$y = 10;$count = 100/$x;$i = 1;$c = 1 ;while($i<=$count){    $min = $c ;    $max = $c = $c + ($x -1);    if (in_array($a, range($min, $max))) {        echo "\n result= " . $i * $y;        break;    }    $c++;    $i++;}上面代碼的輸出是正確的30,但我想找到一種更有效的技術。
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

似乎您想y對每個范圍的x數字進行添加,直到a從 開始1。如果這個假設是正確的,您可以除以a得到x偏移量(將發生的范圍數)并將其乘以y。如果 的除法a / x有小數,則在乘以 之前將商(如偏移量)增加 1 y。


片段:


<?php


$tests = [

        2,

        5,

        7,

        11,

        12

    ];

    

$x = 5;

$y = 10;


foreach($tests as $a){

    $quo = intval($a / $x);

    if($quo * $x < $a) $quo++;

    echo $a," => " ,$quo * $y,PHP_EOL;

}

演示: https: //3v4l.org/rDe3Z

所以,這樣的話,時間復雜度就是O(1)。



查看完整回答
反對 回復 2023-09-22
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

我只是簡單地用它ceil($a / $x) * $y來計算總數。用簡單的英語來說,將數字除以每個級別的分數,然后將該值向上舍入到下一個整數,然后將該值乘以每個級別的分數。

我假設負輸入要么是不可能的,要么應該產生負結果。我還假設零輸入應該有零輸出。

代碼:(演示

$as = [0, 1, 2, 5, 7, 10, 16, 49];

$x = 5;

$y = 10;

foreach ($as as $a) {

    echo "$a => " . (ceil($a / $x) * $y) . "\n";

}

輸出:


0 => 0

1 => 10

2 => 10

5 => 10

7 => 20

10 => 20

16 => 40

49 => 100


查看完整回答
反對 回復 2023-09-22
  • 2 回答
  • 0 關注
  • 131 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號