Как рассчитать «хиты» здесь без цикла? - PullRequest
0 голосов
/ 11 ноября 2019
#include <stdio.h>

int main()
{
    int ix;
    unsigned hits = 0;
    for (ix=0; ix < 128; ix++)
    {   
        if (ix % 4 == 0)
            continue;   

        hits++;
    }
    printf("%u hits\n", hits);
    return;
}

Это не вопрос программирования, у меня нет такого кода. Но мне интересен математический способ решения такой проблемы. Printf возвращает "96 хитов". Мой вопрос: есть ли формула для вычисления "хитов" без цикла?

1 Ответ

1 голос
/ 11 ноября 2019

Этот фрагмент:

if (ix % 4 == 0)
    continue;   

в основном означает «пропустить каждую четвертую итерацию». Это означает, что это равносильно сокращению числа итераций на 25%. Таким образом, в этом случае, поскольку операция hits++ вообще не зависит от значения, если ix, все то же самое, что и:

unsigned hits = 0;
for (ix=0; ix < 128 * 3/4; ix++)
{   
    hits++;
}

И поскольку единственной операцией является приращение,Вы можете изменить все, чтобы просто

hits = 128*3/4;
...