Allan Jone Ответов: 4

Как мне сделать эту программу на языке Си#


Программа
Выход состоял только из чисел от 1 до N. Но каждое число, кратное 3, было заменено Вака, каждое число, кратное 5, - Мака и каждое число, кратное 7, - лака.
Если какое-либо число было кратно двум или трем числам 3,5,7, то это число заменялось соответствующими кодами (лака, Мака, Вака) в лексикографическом порядке, разделенными пробелом. Например, 21 был заменен на "Лакавака" (отсутствие пространства между ними).

Выход звучал как 1 2 лака 4 Мака лака Вака 8.... и т. д.

Напишите программу, которая будет отображать n слов в выходных данных.

входной формат:
Входные данные-это целочисленное значение, соответствующее N.
выходной формат:
Вывод должен печатать вывод.

См. примеры ввода и вывода для получения спецификаций форматирования.

Пример Ввода
10
Пример Вывода
1 2 Вака 4 Мака Вака Лака 8 Вака Мака

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            for (int i = 1; i <= n; i++)
            {
                if (i % 3 == 0)
                {
                    if (n < 14)
                        Console.Write("Waka");
                    else
                        Console.Write("Laka");
                }
                if (i % 5 == 0)
                {
                    Console.Write("Maka");
                }
                if (i % 7 == 0)
                {
                    if (n < 14)
                        Console.Write("Laka");
                    else
                        Console.Write("Waka");
                }
                if (i % 3 != 0 && i % 5 != 0 && i % 7 != 0)
                {
                    Console.Write(i);
                }

                Console.Write(" ");
            }
            Console.ReadKey();
        }
    }
}



Я получаю выходные данные, но проваливаю тестовый случай для различных других входов

Jochen Arndt

Мы поможем, если вы попробуете сами, где-то застряли, и покажем, где (код) и что (ошибки, пояснения).

Но здесь вы не сделаете домашнее задание.

4 Ответов

Рейтинг:
5

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Allan Jone

Я добавил код выше пожалуйста помогите мне

OriginalGriff

Итак, что вы пытались сделать, чтобы выяснить, в чем проблема? Что говорит отладчик?

Рейтинг:
28

CPallini

Начните просто: выполните только 3 -> Maka подстановка: если число кратно (точно делится на) 3 затем распечатывать 'Maka', в противном случае выведите сам номер.
подсказка: если число n точно делится на 3 затем (n % 3 == 0) держит.
Затем добавьте простое 'Waka' и 'Laka' замены.
В конце концов позаботьтесь о числах, имеющих несколько 3,5,7 факторы.


Рейтинг:
22

Jochen Arndt

В вашей реализации есть две логические ошибки (которые связаны и поэтому решаются вместе):


  1. Вы используете один if заявления, но следует использовать else if вместо этого, чтобы избежать создания нескольких выходов для одного числа (например, 15 кратно 3 и 5)
  2. Вы не справлялись со случаем "если какое-либо число было кратно двум или трем числам 3,5,7" (то есть 3*5=15, 3*7=21, 5*7=35, и 3*5*7=105)

Таким образом, у вас есть четыре дополнительных числа (и кратные им), чтобы проверить и заменить [EDIT] и наблюдать, в каком порядке вы выполняете проверки[/EDIT].


Allan Jone

Я не использовал else if, так как выход должен быть LakaWaka для 21 и LakaWakaMaka для 105 без пробела,
и приведенный выше код печатается правильно

Jochen Arndt

Извините, я упустил из виду, что вы занимаетесь этим с другим, если внутри меняете порядок.
Но это делает его гораздо более сложным, трудным для отслеживания и может привести к ошибкам. И есть один: что печатается за 15 по вашему коду ?
Это должно быть 5 * 3 = Макавака.
Но ваш код печатает Лакамака.

Я пытался указать вам, чтобы вы справлялись с этими комбинациями аналогичным образом:
если (i % (3*5*7) == 0) ...
иначе если (i % (5 * 7) == 0) ...

Вы все еще можете использовать свой подход (без else), но тогда вам следует сначала проверить i % 7, что позволяет избежать дополнительных "особых" условий.

Allan Jone

15 = 5*3 или 3*5
Как печатать?
MakaWaka или WakaMaka

Они дали 21 был заменен на "Лакавака" (нет пространства между ними).
1. каждое число, кратное 3, заменялось Вака, каждое число, кратное 5, - Мака и каждое число, кратное 7, - лака.

еще

2. Если какое-либо число кратно двум или трем числам 3,5,7, то это число заменяется соответствующими кодами (лака, Мака, Вака) в лексикографическом порядке, разделенными пробелом.(Что это значит)

Jochen Arndt

См. пример для 21 = 7 * 3. Слово для 7 должно быть напечатано первым (поэтому я поставил более высокое число первым).

Allan Jone

У меня возникли проблемы с пониманием вопроса,пожалуйста, уточните ключевое слово lexogrphical order.

Рейтинг:
13

Patrice T

Черт возьми, где вы видели в утверждении, что после 14 Вака заменяется бу Лакой для кратных 3 ?

if (n < 14)
    Console.Write("Waka");
else
    Console.Write("Laka");

Совет: используйте отладчик, чтобы увидеть, как работает ваша программа, обратите внимание на то, как строится вывод.
Показать не составит труда понять причину вывода в неправильном порядке.
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.