Loading...
ManoelaVasileva avatar ManoelaVasileva 1 Точки

Проблем със задача 10. Top Number от Methods - Exercise - C# Fundamentals

Здравейте колеги. Може ли някой да помогне за задача 10. Top Number от Methods - Exercise. Програмата работи локално с входните данни от примера и в Judge - Zero tests ми дават Correct answer, но всички останали тестове дават грешка.

Условие към задачата: https://softuni.bg/trainings/resources/officedocument/46397/exercise-problem-descriptions-csharp-fundamentals-january-2020/2600 

Ето и моят код: https://pastebin.com/rCz9VQb1 

Тагове:
0
Module: C# Advanced 08/02/2020 20:27:45
ivailogeimara avatar ivailogeimara 37 Точки
Best Answer

Първо:

Първият ти цикъл (в Main) трябва да е от 1 до number включително ("[1…n]" по условие)

for (int i = 0; i < number; i++)

Второ в GetOddNum(int number) имаш

number %= 10;

което заменя number с number % 10. Този ред е същото като:

number = number % 10;

и цикълът преключва след първото изпълнение, защото number става едночислено (number става равен на остатъка от делението на number с 10) и след отва го делиш на 10 и number става 0. Махни този ред и замени условието на if-а с:

if ((number % 10) % 2 == 1)

Освен това не ти трябва този counter и result в GetOddNum. Там където увеличаваш counter го замени с

return true;

и махаш целия if за counter-а, махаш result променливата и накрая връщаш false вместо result.

Ето едно правилно решение: (не мога да го тествам в Judge в момента, защото нещо не работи Judge-а, но това решение е пренаписано от Java, което съм предал за 100/100)

using System;

namespace _10._Top_Number
{
  class Program {
    static void Main(string[] args)
    {
      int number = int.Parse(Console.ReadLine());

      PrintTopNumbersUpTo(number);
    }

    private static void PrintTopNumbersUpTo(int number)
    {
      for (int i = 1; i <= number; i++)
      {
        if (IsDigitSumDivisibleBy8(i) && HasOddDigit(i))
          Console.WriteLine(i);
      }
    }

    private static bool HasOddDigit(int number)
    {
      while (number > 0)
      {
        if ((number % 10) % 2 == 1)
          return true;
        number /= 10;
      }

      return false;
    }

    private static bool IsDigitSumDivisibleBy8(int number)
    {
      int digitSum = 0;
      while (number > 0)
      {
        digitSum += number % 10;
        number /= 10;
      }

      if (digitSum % 8 == 0)
        return true;

      return false;
    }
  }
}


 

0
09/02/2020 10:18:26
ManoelaVasileva avatar ManoelaVasileva 1 Точки

Благодаря много за изчерпателният отговор. Оправих го :) 

0
biserborisov avatar biserborisov 1 Точки

Ето и моето решение, 100/100 в Judge: 

using System;

namespace ConsoleApp2
{
    internal class Program
    {

        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            IsTopNumber(n);
        }
        static void IsTopNumber(int n)
        {

            for (int i = 1; i <= n; i++)
            {
                int sumDigits = 0;
                int counterOdds = 0;
                string toString = i.ToString();
                for (int j = 0; j < toString.Length; j++)
                {
                    int digit = int.Parse(toString[j].ToString());
                    if (digit % 2 != 0)
                    {
                        counterOdds++;
                    }
                    sumDigits += digit;
                }
                if (sumDigits % 8 == 0 && counterOdds >= 1)
                {
                    Console.WriteLine(i);
                }
            }
        }
    }
}


 

0
13/10/2023 21:23:57
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.