Перейти к содержанию
Знакомство с языком программирования С#: Напишите программу, которая выводит третью цифру заданного числа или сообщает, что третьей цифры нет
На чтение 2 мин Просмотров 554 Опубликовано 03.03.2023
Обновлено 03.03.2023
Задача: Напишите программу, которая выводит третью цифру заданного числа или сообщает, что третьей цифры нет
Содержание
- Пример:
- Решение:
- Пояснение:
Пример:
645 -> 5
78 -> третьей цифры нет
32679 -> 6
Решение:
int Prompt(string msg)
{System.Console.WriteLine($»{msg}»);
return Convert.ToInt32(Console.ReadLine());
}
int number = Prompt(«Введите число»);int fnumber(int number)
{
while (number > 999)
{
number /= 10;
}
return number % 10;
}bool check(int number)
{
if (number < 100)
return false;
else return true;
}if (check(number) != true)
System.Console.WriteLine(«Третьей цифры нет»);
else
System.Console.WriteLine($»Третья цифра числа {number} является {fnumber(number)}»);
Пояснение:
Нетривиальная задача. В решении используются две функции: fnumber и Prompt.
Похожий код:
Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.
Формулировка задачи:
дано число 350. надо найти 3, 5 и 0 из этого числа… то есть например должно выйти a=3 , b=5 , c=0. и сделать с помощью команд mod, div.
Код к задаче: «Найти 1-ое, 2-ое и 3-е число трёхзначного числа»
textual
var masnum: array [1..100] of integer; i,n,k:integer; begin writeln('Vvedite chislo'); readln(n); k := 0; while n > 0 do begin k := k + 1; masnum[k] := n mod 10; n := n div 10; end; for i:=k downto 1 do write(masnum[i]:3); readln; end.
Полезно ли:
15 голосов , оценка 3.800 из 5
Как определить цифру из данного числа?
Например, число 1337 состоит из 4 цифр. Как узнать вторую цифру ?
задан 20 ноя 2017 в 4:46
tonymoretonymore
3292 серебряных знака16 бронзовых знаков
6
string str = 1337.ToString();
Console.WriteLine(str[1]);
нумерация в строках такая же как и в массивах, но доступ по индексу к элементу доступен только для чтения
ответ дан 20 ноя 2017 в 4:55
AlexandrAlexandr
4542 серебряных знака15 бронзовых знаков
Способ без превращения числа в строку (будет работать быстрее):
static void Main(string[] args)
{
int n = 534534623;
int d = GetSecondDigit(n);
Console.WriteLine(d);
Console.ReadKey();
}
static int GetSecondDigit(int k)
{
while (k >= 100) k /= 10;
int d = k % 10;
return d;
}
Хотя, конечно, если у вас на входе строка, то проще получить второй символ по индексу (как в соседнем ответе).
ответ дан 20 ноя 2017 в 6:08
Андрей NOPАндрей NOP
28.3k4 золотых знака39 серебряных знаков77 бронзовых знаков
Делим без остатка на 100, затем берём остаток от деления на 10. Не понимаю, зачем вам отправили конвертацию в строку и даже отдельную функцию с циклом.
ответ дан 23 дек 2020 в 20:43
ПавелПавел
543 бронзовых знака
1
Console.WriteLine("Введите трехзначное число");
int.TryParse(Console.ReadLine()!, out int k);
if (k>999 || k<100)
{
Console.WriteLine("Не трехзначное число!!!");
return;
}
int GetSecond(int k)
{
while (k >= 100) k /= 10;
int d = k % 10;
return d;
}
Console.WriteLine(GetSecond(k));
мэйби как то так?
ответ дан 16 мар в 11:07
1
Конечно перебирать все 3-х значные числа не стоит. Можно сузить круг поиска. В некоторых программах 5-го класса проходят таблицу квадратов, хотя в основных программах она в 7-м классе. Вернее не совсем таблицу, а квадраты некоторых чисел и интересные факты.
Поэтому вспомнив таблицу квадратов или посчитав её или подсмотрев где либо увидим, что трехзначных чисел таких: 22 и перебирать надо среди 22, а не 900.
(Ответ extatic хорош, но он не совсем системный. По сути он опустил, что выбор производит среди этих 22 чисел. Иначе как он выкинул окончание 5? Ну заканчивается на 25 и что? Например 625 – квадрат 25; 256 – квадрат 16, может еще есть какое число переставив цифры которого получим квадрат. Например 526? Это можно проверить только зная трехзначные числа квадратов или проверяя каждое, а не квадрат ли это? Зная числа квадратов из таблицы легко уже можно проверить. С остальными по сути так же)
То есть по сути перебор осуществляется среди 22 трехзначных чисел.
__ |. 0 . |. 1 . |. 2 . |. 3 . |. 4 . |. 5 . |. 6 . |. 7 . |. 8 . |. 9 . |
10 | 100| 121| 144| 169| 196| 225| 256| 289| 324| 361|
20 | 400| 441| 484| 529| 576| 625| 676| 729| 784| 841|
30 | 900| 961|
Конечно можно сократить этот перебор выкинув первый столбец с нулями. Останется 19 чисел.
Потом можно выкинуть, то что попадается редко. Например с цифрой 3 (324 и 361). останется 17
Потом с цифрой 7: (576; 676; 729; 784). Среди них нет троек. Останется 13 чисел.
Потом с цифрой 8: (289; 484; 784-уже вычеркнули; 841). Тоже нет троек. Останется 10 чисел
Потом проверяем 2: (121; 225; 256; 289-уже вычеркнули; 324 – вычеркнули; 529; 625; 729 – вычеркнули) – среди них так же нет троек. Останется 5 чисел.
Причем получится, что все 5-ки уже вычеркнуты.
Проверяем 4 среди не вычеркнутых: (144; 441). Останется 3 числа:
169; 196 и 961 – и это искомые числа: 169 = 13²; 196 = 14²; 961 = 31²
Причем видно, что других решений нет. Оно единственное (что, например, extatic не гарантировал. Просто нашел 1 ответ)
Данная задача не имеет какого либо закономерного решения. Она носит лишь познавательный характер и позволяет ученикам проще запомнить квадраты некоторых чисел, что позволит легче ориентироваться и решать задачи в дальнейшем.
Это задачи из серии интересного: 12² = 144 и 21² = 441; или 13² = 169 и 31² = 961; Но это только для этих пар чисел перестановка цифр дает перестановку цифр в результате и не несет никакой закономерности.
Поэтому как ни крути, а задачу решать перебором, но разумным. Не всех чисел, а только квадратов.
Все просто:
‘это комментарий
For I = 1 To 3 ‘ цикл. 3ка это разрядность делимого числа. Хоть 100 разрядов.
x = Число Mod 10 ‘ Число должно быть байтом без запятых!
Print x ‘ вот тут появляется последняя цифра числа
Число = Число / 10 ‘ тут число лишается последней цифры
Next
‘Для понимания: другие варианты:
Dim Цифра(4) As Byte ‘ массив из байт (целые числа без запятой!)
Цифра(4) = 123 ‘разбиваем 123 на 1,2,3
Цифра(1) = Цифра(4) / 100 ‘123/100=1
Цифра(3) = Цифра(4) Mod 10 ‘остаток от деления 123 на 10 = 3
Цифра(4) = Цифра(4) / 10 ‘ 123/10=12
Цифра(2) = Цифра(4)mod 10 ‘ остаток от деления 12 на 10 =2
Print Цифра(1) ; Цифра(2) ; Цифра(3) ‘ 1 2 3 печатаем наши три цифры
‘ Второй вариант:
Dim I As Byte , Цифра(4) As Byte
Цифра(4) = 123 ‘разбиваем 123 на 1,2,3
For I = 3 To 1 ‘ цикл. 3ка это разрядность делимого числа. Хоть 100 разрядов. Но и массив должен быть такой же
Цифра(i) = Цифра(4) Mod 10
Цифра(4) = Цифра(4) / 10
Next
Print Цифра(1) ; Цифра(2) ; Цифра(3)