Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

вычислить последовательность

n = 12 должно вывести 1+2+3+4+5+6+7+8+9+(1+0)+(1+1)+(1+2) Написал 2 программы, но пишет, из-за того что долго выполняются - процесс отменяется. То есть, их нужно оптимизировать, только вот КАК Код двух программ:
using System;
public class TwistedSum { public static long Solution(long n) { int res = 0; int ostatok = 0; int Part = 0; for (int i = 1; i <= n; i++) { if (i >=10) { Part = i; while (Part >= 0) {
ostatok = Part % 10; Part = Part / 10; res = res + ostatok; } } else { res = res + i} }
return res; } }
(тут передается в n число, все нормально, просто только функция написана) 2ой код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace codewarsSumaCifr { class Program { static void Main(string[] args) { long n = 10; Console.Write(Solution(n)); Console.ReadKey();
}
public static long Solution(long n) { int res = 0; string str2 = ""; for (int i = 1; i <= n; i++) { str2 = str2 + i.ToString(); }
for (int j = 0; j < str2.Length; j++) { res = res + (int)Char.GetNumericValue(str2[j]);
} return res; } } }


Ответ

Цикл, вообще не правильное решение, его надо свернуть, и решить задачу аналитически. Решать задачу целиком скучно, но идею, как она решается, подкину:
9: (0+0)+(0+1)+(0+2)+(0+3)+(0+4)+(0+5)+(0+6)+(0+7)+(0+8)+(0+9) = 45 19: (1+0)+(1+1) ... +(1+8)+(1+9) + 45 = 1*10 + 1*45 + 45 29: (2+0)+(2+1) ... +(2+8)+(2+9) + 2*45 + 1*10 = 2*10 + 1*10 + 2*45 + 45 ... 99: (9+0)+(9+1) ...+(9+9) + 9*45 + 8*10 ... + 1*10 = 9*10 + 8*10 ... + 1*10 + 9*45 + 45

Комментариев нет:

Отправить комментарий