While12. Дано целое число $$N$$ ($$> 1$$). Вывести наибольшее из целых чисел $$K$$, для которых сумма $$1 + 2 + … + K$$ будет меньше или равна $$N$$, и саму эту сумму.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main(void) { int n; printf("N:"); scanf ("%i", &n); int k=0, temp=0; while (!(temp+k+1>n)) { ++k; temp+=k; } printf("K: %i\nSum:%i\n",k,temp); return 0; } |
Другие задачи из раздела While можно посмотреть здесь.
int k=0, temp=0;
while (!(temp+k>n)) {
++k;
temp+=k;
}
пожно подробно пошагово! что мы здесь сделали!
Начну с того что в решении была ошибка… в цикле я брал не следующую k а текущую…
поэтому поправил с
на:
Но всё равно попытаюсь объяснить по шагово:
В нутри этого цикла происходит следующее:
1 шаг
++k;//k=0+1 так как при объявлении k мы прировняли его к 0. И увеличили на 1.
temp+=k;//temp=0+1 так как при объявлении temp мы приравняли к 1. А k на предыдущем шаге стал равен 1.
2 шаг
++k; //k=1+1; увеличили k на 1
temp+=k; // temp =1+2 к temp прибавляем k
3 шаг
++k; //k=2+1; продолжаем увеличивать k на 1
temp+=k; //temp=3+3 и прибавлять к temp k
в итоге у нас k будет увеличиваться по правилу:
1+2+3+4+..
while (!(temp+k+1>n)) {
пока temp+ (k+1) не больше n.