Мня смущает вот это: scanf("%d%d", &n, &k);
Подозреваю, что какие то неоднозначное поведение. попробуйте заменить это на
scanf("%d", &k);
scanf("%d", &n);
P. S.
и вообще, по моему проще это получать из параметров =)
Могу предположить что вы ищите столкновение "пиксель в пиксель" попробуйте расширить зону столкновения заменив "а == х" на "a > x-d && a < x+d" ну и нафигачте принтов что бы посмотреть какие значения есть реально и почему вы не попадаете в свое условие
Что то я сомневаюсь, что у вас программа работает. Вы пытаетесь в стеке задать масив произвольной длинны. В стеке можно создавтаь масивы только фиксированной длинны, так как под них выделяется память во время компиляции. В вашем же случае нужно использовать кучу (см функции malloc() и free()) https://en.wikipedia.org/wiki/C_dynamic_memory_all...
Это если мы говорим про C если же вы пишете это на C++ (пожалуйста различайте эти языки) то вам в помощь вектора