Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Elena123456 avatar Elena123456 235 Точки

Задача Digits- 7.2. Complex Loops - Exam Problems

Здравейте, може ли помощ за следната задача. Може би греша някъде в логиката или подозирам, че  не успявам правилно да декларирам променливите.

 

Задача: цифри

Да се напише програма, която прочита от конзолата 1 цяло число в интервала [100 … 999], и след това го принтира определен брой пъти - модифицирайки го преди всяко принтиране по следния начин:

  • Ако числото се дели на 5 без остатък, извадете от него първата му цифра.
  • Ако числото се дели на 3 без остатък, извадете от него втората му цифра.
  • Ако нито едно от горните условия не е вярно, прибавете към него третата му цифра.

Принтирайте на конзолата N брой реда, като всеки ред има M на брой числа, които са резултат от горните действия. Нека:

  • N = сбора на първата и втората цифра на числото.
  • M = сбора на първата и третата цифра на числото.

Входни данни

Входът се чете от конзолата и е цяло число в интервала [100 … 999].

Изходни данни

На конзолата трябва да се отпечатат всички цели числа, които са резултат от дадените по-горе изчисления в съответния брой редове и колони, както в примерите.

Примерен вход и изход

Вход Изход Коментари
132 129 126 123
120 119 121
123 120 119
121 123 120
(1 + 3) = 4 и (1 + 2) = 3 → 4 реда по 3 числа на всеки ред
Входното число 132
132 → деление на 3 → 132 - 3 =
= 129 → деление на 3 → 129 - 3 =
= 126 → деление на 3 → 126 - 3 =
= 123 → деление на 3 → 123 - 3 =
= 120 → деление на 5 → 120 - 1 =
..... 121 → нито на 5, нито на 3 → 121 + 2 = 123
Вход Изход Коментари
376 382 388 394 400 397 403 409 415 412
418 424 430 427 433 439 445 442 448
454 460 457 463 469 475 472 478 484
490 487 493 499 505 502 508 514 520
517 523 529 535 532 538 544 550 547
553 559 565 562 568 574 580 577 583
589 595 592 598 604 610 607 613 619
625 622 628 634 640 637 643 649 655
652 658 664 670 667 673 679 685 682
688 694 700 697 703 709 715 712 718

10 реда по 9 числа на всеки
Входното число 376 → нито на 5, нито на 3 → 376 + 6 → =
= 382 → нито на 5, нито на 3 → 382 + 6 =
= 388 + 6 = 394 + 6 =
400 → деление на 5 → 400 - 3 = 397

 

 

Ето и моя неуспешен опит:

using System;
                    
public class Program
{
    public static void Main()
    {
    var n=int.Parse(Console.ReadLine());
    var N=n/10 + (n/10)%100;
    var M=n/10 + n%10;    
        
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <=M; j++) {
            if (n % 5 == 0) {    
                var num1= n-n/10;
            Console.Write(num1+ " ");

            }
            else if (n % 3 == 0) {    
                var num2=n-(n/10)%100;
                Console.Write(num2+ " ");

             }
            else {
            var num3=n+n%10;
                Console.Write(num3+ " ");
            }
            }
           Console.WriteLine();
        }
        }
        }


                
        

 

 

1
Programming Basics
MartinBG avatar MartinBG 4803 Точки
Best Answer

Има неточности и пропуски в решението, затова направо прилагам работещо такова, като оставам на разположение при въпроси:

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

namespace ConsoleApp1
{
    internal class Program
    {
        public static void Main()
        {
            var number = int.Parse(Console.ReadLine());
            var firstDigit = number / 100;
            var secondDigit = (number % 100) / 10;
            var thirdDigit = number % 10;
            var rows = firstDigit + secondDigit;
            var cols = firstDigit + thirdDigit;

            for (var row = 0; row < rows; row++)
            {
                for (var col = 0; col < cols; col++)
                {
                    if (number % 5 == 0)
                    {
                        number -= firstDigit;
                    }
                    else if (number % 3 == 0)
                    {
                        number -= secondDigit;
                    }
                    else
                    {
                        number += thirdDigit;
                    }
                    Console.Write(number + " ");
                }

                Console.WriteLine();
            }
        }
    }
}

За удобство намирам кои са 1-вата, 2-рата и 3-тата цифра и ги ползвам наготово в цикъла.

0
Elena123456 avatar Elena123456 235 Точки

Благодаря Ви за пореден път!

Още в началото с предварителното деклариране на числата е много по-четимо. :)

Видях,че съм сбъркала намирането на първото число: firstDigits=n/100, а не n/10. И значи да разбирам,че не е правилно при всяка if проверка да декларирам нови num1, num2, num3. Достатъчен е един и същи number, тъй като number е свързан и с трите проверки. Като например първо number се дели на 5, а после продължава да се дели на 3, ако е възможно. И накрая от number, които остават, ако не се делят на 5 или на 3,то се прибавя към тях thirdDigjts.

Поздрави!

 

1
MartinBG avatar MartinBG 4803 Точки

Да, number е началното число, което се модифицира (по веднъж) на всяка стъпка по описания в условието начин. Проверките трябва да са в точната последователност: първо се проверява дали се дели на 5 без остатък и само ако не се дели се проверява за 3 и т.н., за да гарантираме точно една модификация (и то от типа с най-висок приоритет: %5 > %3 > any).

Описанието на задачата е малко неясно, поне на пръв поглед, но с коментарите към примерите става ясно какво се иска.

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