Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Заблокирован

Можно ли написать более оптимальный или простой код, используя цикл for?

29.07.2015, 19:25. Показов 1371. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
собственно сабж.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
using namespace std;
 
int main()
{
    int sum, count, ost;
 
    for (count = 0; count < 99; count++)
    {
        ost = count % 2;
 
        if (ost != 0)
        {
            sum += count;
        }
 
        else
        {
            continue;
        }
 
    }
 
    cout << "summa = " << sum;
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2015, 19:25
Ответы с готовыми решениями:

Можно ли написать более оптимальный код, используя цикл while?
собственно сабж. #include &lt;iostream&gt; using namespace std; int main() { int x, y, s, step = 1; cout &lt;&lt;...

Есть ли более простой и оптимальный способ решения данной задачи?
Добрый день! Ситуация следующая: Есть класс Event. public class Event { public string Name { get; set; } public...

Как можно сократить код используя цикл For?
$('#Memu-Group-A-1').mouseenter(function() { $(&quot;#Memu-Group-A-1 p&quot;).css(&quot;border-bottom&quot;,&quot;3px solid red&quot;); ...

16
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.07.2015, 19:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main()
{
    int sum, count, ost;
 
    for (count = 0; count < 99; count++)
    {
        ost = count % 2;
        if ( ost ) sum += count;
    }
 
    cout << "summa = " << sum;
 
    return 0;
}
Было бы что оптимизировать. Сумму нечётных чисел наверное можно и по формуле досчитать, без цикла.
0
Заблокирован
29.07.2015, 19:38  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Было бы что оптимизировать. Сумму нечётных чисел наверное можно и по формуле досчитать, без цикла.
мне важно знать что я делаю правильно, а что нет
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.07.2015, 19:56
C++
1
2
3
4
for (count = 1; count < 99; count+=2)
{
     sum += count;
}
так в 2 раза меньше итераций
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.07.2015, 20:02
Цитата Сообщение от rep plz Посмотреть сообщение
мне важно знать что я делаю правильно, а что нет
Еще бы знать что именно ты хочешь сделать...
0
Заблокирован
29.07.2015, 20:09  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Еще бы знать что именно ты хочешь сделать...
используя цикл for посчитать сумму все нечетных чисел от 1 до 99

Добавлено через 39 секунд
Цитата Сообщение от Даценд Посмотреть сообщение
так в 2 раза меньше итераций
тогда он будет суммировать и четные числа. а мне нужны только нечетные
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.07.2015, 20:11
Цитата Сообщение от rep plz Посмотреть сообщение
тогда он будет суммировать и четные числа
Только нечетные! Обратите внимание на модификацию count.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.07.2015, 20:11
Цитата Сообщение от rep plz Посмотреть сообщение
тогда он будет суммировать и четные числа. а мне нужны только нечетные
Не будет.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.07.2015, 20:13
...
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2015, 20:15
1.
Цитата Сообщение от rep plz Посмотреть сообщение
C++
1
2
3
{
 continue;
}
здесь не нужно, так как оно завершает тело цикла. Можно просто завершить тело цикла сразу после
Цитата Сообщение от rep plz Посмотреть сообщение
C++
1
2
3
4
if (ost != 0)
{
 sum += count;
}
.
2. Зачем нужна переменная ost? Скормить оператору сравнения можно и временную величину, а больше ost ни где не учитывается. Возможно это и не помешает автоматической оптимизациям, но я бы убрал:
C++
1
2
3
4
if ((count % 2)==0)
{
 sum += count;
}
.
3. Постфиксный инкремент оптимизируется только до префиксного, префиксный уже оптимален. Поэтому не
Цитата Сообщение от rep plz Посмотреть сообщение
C++
1
for (count = 0; count < 99; count++)
, а
C++
1
for (count = 0; count < 99; ++count)
.
4. Сравнение с любым не нулевым числом бывает медленнее, чем с нолём, так как требует . Поэтому ещё лучше
C++
1
for (count = 98; count >=0; --count)
. Но только если можно не в ущерб разрядности юзать только знаковый счётчик. Если диапазона представимых значений знакового типа не хватает, то для такого похода придётся поднимать разрядность, если в итоге превысить разрядность шины, то инкремент/декремент можно замедлить. А если превысить разрядность даже регистра, то инкремент/декремент будут гарантированно замедленны. Тогда придётся всё таки сравнивать с количеством шагов цикла. Если порядок значений счётчика важен сам по себе, то менять инкремент на декремент нельзя. Но здесь не важен.
5. По стандарту явно не инициированная переменная или содержит мусор, или инициируется своим конструктором. Так что полагаться на то, что в sum до первого увеличения будет 0, не стоит. А вот инициировать ли её в операции, или в декларации значения не имеет, так как инициируется она один раз, а сравнения и инкременты/декременты выполняются каждый раз.
0
Заблокирован
29.07.2015, 20:16  [ТС]
Цитата Сообщение от shmkv Посмотреть сообщение
1 сточка. Кто меньше?
а где цикл for?
Цитата Сообщение от Даценд Посмотреть сообщение
Только нечетные! Обратите внимание на модификацию count.
я не знаком с такой модификацией..завтра поэкспериментирую, сейчас уже голова не варит
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2015, 20:18
Цитата Сообщение от Даценд Посмотреть сообщение
for (count = 1; count < 99; count+=2)
{
sum += count;
}
так в 2 раза меньше итераций
Да, для констант так ещё лучше, хотя увеличение на 2 потенциально и медленнее. Но не весь же шаг цикла в два раза.

Добавлено через 40 секунд
Цитата Сообщение от rep plz Посмотреть сообщение
тогда он будет суммировать и четные числа. а мне нужны только нечетные
Нет. Нечётное плюс два равно нечётное.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.07.2015, 20:23
Цитата Сообщение от taras atavin Посмотреть сообщение
хотя увеличение на 2 потенциально и медленнее
зато нет проверки четности
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.07.2015, 20:27
а тут нечетные, тогда еще проще:
C++
1
2
3
const int n = 99;
const int n_2 = n / 2;
sum = n_2 * n_2;
1 сточка вычислений.

Добавлено через 1 минуту
rep plz, у тебя кстати sum нулем перед циклом не инициализируется.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2015, 20:28
Цитата Сообщение от shmkv Посмотреть сообщение
2
const int n = 99;
sum = n * (n + 1);
1 сточка. Кто меньше?
1. На примере данной задачи он изучает программирование, а не математику, а если говорить именно о программном решении, то ты решил даже если и эквивалентную, то всё таки другую задачу - задачу вычисления по формуле, а не вычисление суммы чисел.
2. 99*100=9900, а 1+3+5+7+9+11+13+15+17+19+21+23+25+27+29+ 31+33+35+37+41+43+45+47+49+51+53+55+57+5 9+61+63+65+67+69+71+73+75+79+81+83+85+87 +89+91+93+95+97+99=2500. Обратите внимание: 2.1. Нужна сумма только нечётных чисел от 1 до 99, а их не 99, а 50.
2.2. По формуле https://www.cyberforum.ru/cgi-bin/latex.cgi?s=\frac{a_1+a_n}{2}*n, а не https://www.cyberforum.ru/cgi-bin/latex.cgi?s=(a_1+a_n)*n.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.07.2015, 20:34
Цитата Сообщение от rep plz Посмотреть сообщение
а где цикл for?
ну на for:
C++
1
for(sum = 0, count = 1; count < 10; sum+=count, count+=2);
Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Обратите внимание
Да я поправил. Не обязательно мне было так расписывать все. Кстати тут не n, а n /2 получается.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2015, 20:36
Кстати, до 99 включительно, то <=99, а не <99.
С декрементом и половиной иттераций
C++
1
for (count=97; count>0; count-=2)
, а если включая 99, то
C++
1
for (count=99; count>0; count-=2)
, а со всеми иттерациями и включая 99 с декрементом будет
C++
1
for (count=99; count>0; --count)
.

Добавлено через 1 минуту
Цитата Сообщение от shmkv Посмотреть сообщение
Не обязательно мне было так расписывать все. Кстати тут не n, а n /2 получается.
Справочная формула - полусумма на всю n.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2015, 20:36
Помогаю со студенческими работами здесь

Можно ли написать этот код более компактно?
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; void main() { int x, y; cout &lt;&lt; &quot;input x = &quot;; cin &gt;&gt; x; cout...

Используя цикл for, while или repeat(какой быстрее и удобнее) написать программу
Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой...

Используя цикл for, while или repeat(какой быстрее и удобнее) написать программу
Используя цикл for, while или repeat(какой быстрее и удобнее) написать программу Начав тренировки, спортсмен в первый день пробежал 10...

Может ли человек порождать более оптимальный pure javaScript-код, чем TypeScript?
Доброе утро! Можем ли мы вручную порождать более оптимальный и красивый код, нежели TypeScript? Заранее благодарен за отклики.

Написать матрицу через цикл или как сократить код
Здравствуйте , не знаю поймёте вы или нет, но можно ли написать матрицу после &quot;int A =&quot; с помощью цикла или как нибудь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru