Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 07.02.2019
Сообщений: 24

Найдите сумму всех чисел меньше 1000, кратных 3 или 5

09.07.2019, 18:31. Показов 9661. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, в результате программы получается число: 234168. В чём ошибка?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = 0;
            for (int i = 0; i <= 1000; i++)
            {
                if (i % 3 == 0 || i % 5 == 0) { sum += i; }
 
            }
            Console.WriteLine(sum);
            Console.ReadLine();
        }
    }
}
Добавлено через 8 минут
Ответ должен быть 233168
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2019, 18:31
Ответы с готовыми решениями:

Для двух целых чисел a и b, которые могут быть положительными или отрицательными, найдите сумму всех чисел между их вклю
Для двух целых чисел a и b, которые могут быть положительными или отрицательными, найдите сумму всех чисел между их включением и...

Найдите сумму S и произведение Р целых чисел от 1 до n чисел кратных 3
Найдите сумму S и произведение Р целых чисел от 1 до n чисел кратных 3 Добавлено через 11 минут using System; using...

Найти сумму всех n-значных чисел, кратных k
Найти сумму всех n-значных чисел, кратных k (1&lt;=n&lt;=4). Заранее спасибо.

13
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
09.07.2019, 18:32
лишнее равно было
C#
1
for (int i = 0; i < 1000; i++)
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
18.10.2022, 21:03
Всем привет!

Делаю то же задание, но без ограничения верхнего предела N (его подсовывает система, какое - не говорит)
Вариант, предложенный автором, не проходит по времени, пытался оптимизировать:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static int GetSum(int n)
    {
        int result = 0;
        
        if (n > 2)
        {
            for (int i = 1; i * 3 < n; i++)
                result += i * 3;
                
            for (int i = 1; i * 5 < n; i++)
                if (i * 5 % 3 != 0)
                    result += i * 5;
            
            //for (int i = 1; i < n; i ++)
            //    if (i % 3 == 0 || i % 5 == 0)
            //        result +=i;
        }
        return result;
    }
Все равно не проходит! Подскажите, пожалуйста, как еще можно ускорить этот код?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3412 / 2733 / 575
Регистрация: 04.09.2018
Сообщений: 8,581
Записей в блоге: 3
18.10.2022, 22:00
Java
1
2
3
4
5
6
7
8
9
10
public class Main {
    public static void main(String[] args) {
        System.out.println(GetSum(3));
    }
 
    static long GetSum(int n) {
        int[] x = IntStream.rangeClosed(0, 30000).map(e -> e * n).toArray();
        return Arrays.stream(x).sum();
    }
}
Code
1
2
3
1350045000
 
Process finished with exit code 0
Добавлено через 3 минуты
Упссс.... Это же шарп...
Пардоньте )

Добавлено через 27 минут
Vanka03, все зависит от величины, которое "подсовывает система":
C#
1
2
3
4
5
6
7
8
static long GetSum( int n )
{
    int[] enn = Enumerable.Range( 1, 100_000 ).Where( x => x % n == 0 ).ToArray();
    long result = enn.Sum();
    return result;
}
 
Console.WriteLine( GetSum( 3 ) );
Попробуй так. Аргумент n - это кратность. Думаю, в районе чисел от 130к будешь получать оверфлоу. Там уже надо применять BigInteger. Проверить не на чем, тестируй сам.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.10.2022, 22:11
Цитата Сообщение от Vanka03 Посмотреть сообщение
Вариант, предложенный автором, не проходит по времени
А какое ограничение по времени?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3412 / 2733 / 575
Регистрация: 04.09.2018
Сообщений: 8,581
Записей в блоге: 3
18.10.2022, 22:47
Цитата Сообщение от kolorotur Посмотреть сообщение
А какое ограничение по времени?
Согласен с вопросом.
К сожалению, VS под рукой нет, но провел некоторые замеры в J:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
    public static void main(String[] args) {
        System.out.println(GetSum(3));
        System.out.println(GetSum(5));
    }
 
    static long GetSum(int n) {
        int[] x = IntStream.range(0, 100000).map(e -> e * n).toArray();
        long start = System.nanoTime();
        long sum = Arrays.stream(x).sum();
        long finish = System.nanoTime();
        System.out.println("time elapsed [ms]: " + (finish - start) / 1000000);
        return sum;
    }
}


Понятно дело, что при таких исходных значениях и аргументе кратном 5 произошло переполнение.
Но алгоритм, представленный вопрошающим, по идее, должен сработать быстрее на любом ЯП.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.10.2022, 00:04
Цитата Сообщение от wizard41 Посмотреть сообщение
Но алгоритм, представленный вопрошающим, по идее, должен сработать быстрее на любом ЯП.
Думаю, если потолок N не указан, но N представлено как int32, то разумно ожидать на ввод int.MaxValue.

Задача, в принципе, решается за О(1), т.к. там циклы не нужны — это же просто суммы арифметических прогрессий:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{S}_{n}=\frac{n}{2}\left(2a+d(n-1) \right)

Где a — первый член последовательности, n — общее количество членов, d — разность между членами.
Поскольку d = a, формула упрощается:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{S}_{n}=\frac{n}{2}\left(a(n + 1) \right)

Складываем сумму прогрессий с шагом 3 и с шагом 5, потом отнимаем сумму прогрессии с шагом 3 * 5, т.к. эти значения были посчитаны дважды:
C#
1
2
3
4
5
6
7
8
9
long SeriesSum(int a, int n) => (long)(n / 2.0 * (a * (n + 1)));
 
// n - 1 потому что сумма значений в диапазоне [0; n)
long a = SeriesSum( 3, (n - 1) /  3);
long b = SeriesSum( 5, (n - 1) /  5);
long c = SeriesSum(15, (n - 1) / 15);
 
long result = a + b - c;
Console.WriteLine(result);
Плотно не тестировал, но чутье подсказывает, что должно работать.
2
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3412 / 2733 / 575
Регистрация: 04.09.2018
Сообщений: 8,581
Записей в блоге: 3
19.10.2022, 00:34
kolorotur, интересный вариант. Разве что не уверен, что long точно вместит в себя сумму всех чисел кратных n из последовательности ... int.MaxValue.
Цитата Сообщение от kolorotur Посмотреть сообщение
т.к. эти значения были посчитаны дважды:
верно! Но я бы сделал по иному слегка. Студии нет, в блокноте писать не буду.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.10.2022, 09:11
wizard41, сумма-то влезет - сумма всех целых в диапазоне 1-int.MaxValue меньше, чем long.MaxValue.
В формуле 1 разве что заменить на 1L для вычисления в long.
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
19.10.2022, 09:17
Оч понравилась Ваша идея. Единственное: у Вас n - это число элементов прогрессии, а у меня N - это число, больше которого не может быть максимальный элемент прогрессии. Т.е., n = N / 3 (N / 5), вроде как. Ограничения по времени мне неизвестны, не сообщаются. Есть ограничения на количество обрабытваемых N - до 10E5, а также ограничение на само N - до 10Е9.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.10.2022, 09:26
Vanka03, именно поэтому n делится на 3/5/15 при передаче в метод - чтобы преобразовать максимальный элемент в количество членов последовательности.
Но естественно напишите тесты для проверки.
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
19.10.2022, 09:58
И правда, не заметил деления при передаче. Спасибо, пойду проверять!

Добавлено через 22 минуты
Попробуй так. Аргумент n - это кратность. Думаю, в районе чисел от 130к будешь получать оверфлоу.
При всем уважении, но чудес же не бывает) Разве метод Where так же, как и создатель темы не будет перебирать последовательно все элементы массива Range, проверяя их при этом на кратность?
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
19.10.2022, 19:42
Цитата Сообщение от kolorotur Посмотреть сообщение
Плотно не тестировал, но чутье подсказывает, что должно работать
Почему-то код на С# в тестах, где было Out of time теперь показывает Wrong Answer. Такой же алгоритм на python пекрасно работает.
Но это детали.
Блестящее решение! Спасибо!
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.10.2022, 20:05
Цитата Сообщение от Vanka03 Посмотреть сообщение
где было Out of time теперь показывает Wrong Answer
Ну как написал выше, замените в формуле 1 на 1L — скорее всего дело в этом — переполнение int32 на больших входящих.

Добавлено через 23 секунды
C#
1
long SeriesSum(int a, int n) => (long)(n / 2.0 * (a * (n + 1L)));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2022, 20:05
Помогаю со студенческими работами здесь

Найти сумму всех n- значных чисел, кратных k
3.Найти сумму всех n- значных чисел, кратных k (1 &lt;= n &lt;=4).

Найти сумму и количество всех трехзначных чисел кратных 17, не используя цикл
Ребята как всегда зачет в универе Помогите пожалуйста )) нужно найти Сумму и количество всех трехзначных чисел кратных 17 не используя цикл...

В диапазоне от 0 до 99999 найти сумму всех чисел,кратных вашему году рождения
В диапазоне от 0 до 99999 найти сумму всех чисел,кратных вашему году рождения.

Дан массив целых чисел. Найти сумму элементов массива, кратных А или В
2) В массиве хранятся сведения об оценках 25 учеников по химии. Определить количество неуспеваю¬щих по химии учеников 1)Дан массив целых...

Найти сумму всех n-значных чисел, кратных k (1 ≤ n ≤ 4)
Найти сумму всех n-значных чисел, кратных k (1 ≤ n ≤ 4).


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru