Задача 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 числа на всеки |
Ето и моя неуспешен опит:
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();
}
}
}
Благодаря Ви за пореден път!
Още в началото с предварителното деклариране на числата е много по-четимо. :)
Видях,че съм сбъркала намирането на първото число: firstDigits=n/100, а не n/10. И значи да разбирам,че не е правилно при всяка if проверка да декларирам нови num1, num2, num3. Достатъчен е един и същи number, тъй като number е свързан и с трите проверки. Като например първо number се дели на 5, а после продължава да се дели на 3, ако е възможно. И накрая от number, които остават, ако не се делят на 5 или на 3,то се прибавя към тях thirdDigjts.
Поздрави!
Да, number е началното число, което се модифицира (по веднъж) на всяка стъпка по описания в условието начин. Проверките трябва да са в точната последователност: първо се проверява дали се дели на 5 без остатък и само ако не се дели се проверява за 3 и т.н., за да гарантираме точно една модификация (и то от типа с най-висок приоритет: %5 > %3 > any).
Описанието на задачата е малко неясно, поне на пръв поглед, но с коментарите към примерите става ясно какво се иска.