1 / 1 / 0
Регистрация: 09.02.2015
Сообщений: 10
1

Подсчитать количество четных и нечетных цифр в числе в процентном отношении

10.02.2015, 17:15. Показов 7674. Ответов 10
Метки нет (Все метки)

Вот задача: Ввести с клавиатуры число в диапазоне от 100 до 100000000 (введенное число проверяется). Подсчитать количество четных и нечетных цифр в этом числе в процентном отношении.

А вот как я ее решил:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        Console.WriteLine("Введите число от 100 до 100000000:  ");
            int var = Convert.ToInt16(Console.ReadLine());
 
            if (var >= 100 && var <= 100000000)
            {                
                string str = var.ToString();
                int chot = 0;
                int nechot = 0;
                int Length = str.Length;
 
                foreach (char ch in str) 
                {
                    int i = (int)ch;
                    if (i % 2 == 0)
                    {
                        chot++;
                    }
                    else if (i % 2 != 0)
                    {
                        nechot++;
                    }
                }
 
                int procChot = 100 * chot / Length;
                int procNechot = 100 * nechot / Length;
 
                Console.WriteLine("Четных чисел {0}, не четных {1}", chot, nechot);
                Console.WriteLine("Четных чисел {0}%, не четных {1}%", procChot, procNechot);
                Console.WriteLine("Нажмите Enter...");
                Console.Read();
            }
 
            else
            { 
                Console.WriteLine("Число введенно не правильно");
                Console.WriteLine("Нажмите Enter...");
                Console.Read();
            }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2015, 17:15
Ответы с готовыми решениями:

Посчитать количество четных и нечетных цифр в числе
Дано натуральное число N . С помощью операций деления нацело и взятия остатка от деления посчитать...

Подсчет количества четных и нечетных цифр в числе
написать программу подсчитывающую кол-во четных и нечетных цифр в числе

Количество нечетных цифр в числе
В чем здесь может быть ошибка? Основная программа: Console.WriteLine(&quot;Введите...

В массиве из 10 элементов, подсчитать количество четных и нечетных чисел
В массиве из 10 элементов, подсчитать количество четных и нечетных чисел.

10
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.02.2015, 17:37 2
Цитата Сообщение от Aptem69 Посмотреть сообщение
Четных чисел {0}%, не четных {1}%
Введите 110, к примеру. Получите такое:
Четных чисел 66%, не четных 33%
66 + 33 == 99. Внимание, вопрос: куда делся еще один процент?
А по остальному, хоть я и не шарпей, но:
Использование зарезервированного ключевого слова (var) в качестве переменной - явно не лучшая идея.
От названий переменных а-ля chot/procNechot сильно коробит..
Явное указание int в операциях деления (в смысле, вы объявляете переменные как int-овые) приводит к обрезанию дробных частей, что неверно (см. пример выше)
else if непонятно к чему. Там куда логичнее поставить просто else.
Перебор числа как строку, конечно, вариант, но правильнее было бы, пожалуй, перевести в число и работать с числом.
(int) ch - кто мешает сразу написать foreach(int ch in str) ?
Далее - вы проверяете не цифру на нечетность, а ее код в таблице кодировки. Хотите проверять непосредственно число - вычтите '0'. Причем можно без приведения к целому - int i = ch - '0'. Это будет куда логичнее и правильнее со стороны. Хотя бы потому, что в какой-то кодировке теоретически могут соответствовать коды "наоборот" - т.е., цифре 0 соответствовать не код 48, а, к примеру, 49 - и вся ваша проверка пойдет прахом..
Но если не нравится такое приведение к целому - можете воспользоваться любым из существующим. Например, так
C#
1
int i = (int) Char.GetNumericValue(ch);
1
Эксперт .NET
5448 / 4222 / 1207
Регистрация: 12.10.2013
Сообщений: 12,208
Записей в блоге: 2
10.02.2015, 17:43 3
Цитата Сообщение от Aptem69 Посмотреть сообщение
вот как я ее решил:
Решение так себе... Не говоря про работу со строковым представлением числа (что само по себе не есть хорошо, но в данном случае допустимо), реализация не очень...
0
BozKurt
10.02.2015, 17:54
  #4

Не по теме:

Aptem69, ещё можно так:

C#
1
2
3
string num = "123456789";
int evenCount = num.Where(x => Convert.ToInt32(x) % 2 == 0).Count();
Console.WriteLine("Чётных: {0}{2}Не чётных: {1}", evenCount, num.Length - evenCount, Environment.NewLine);
:)

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.02.2015, 18:00 5
Цитата Сообщение от BozKurt Посмотреть сообщение
C#
1
int evenCount = num.Where(x => Convert.ToInt32(x) % 2 == 0).Count();
Эмм... А почему не сразу так:
C#
1
int evenCount = num.Count(x => Convert.ToInt32(x) % 2 == 0);
?
2
Эксперт .NET
5448 / 4222 / 1207
Регистрация: 12.10.2013
Сообщений: 12,208
Записей в блоге: 2
10.02.2015, 18:04 6
Или можно так...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3 {
    class Program {
        static void Main(string[] args) {
            Console.Write("Enter number from 100 to 1000000000: ");
            string number = Console.ReadLine();
            int num;
            if (!int.TryParse(number, out num)) {
                throw new ArgumentException("Argument error!");
            }
            if (num > 100 && num < 100000000) {
                double even = 0;
                double odd = 0;
                number.AsParallel().ForAll(ch => {
                    if (char.Parse(ch.ToString()) % 2 == 0) {
                        even++;
                    }
                });
                odd = number.Length - even;
                Console.WriteLine("Odd numbers persents: {0:G2}%", (100.0 * odd) / (double)number.Length);
                Console.WriteLine("Even numbers persents: {0:G2}%", (100.0 * even) / (double)number.Length);
            }
            Console.ReadLine();
        }
    }
}
0
Master of Orion
Эксперт .NET
6092 / 4948 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.02.2015, 18:09 7
Можно и так
C#
1
2
3
string num = "123456789";
int oddCount = num.Sum(x => (int) x%2);
Console.WriteLine("Чётных: {0}\tНечётных: {1}", num.Length - oddCount, oddCount);
Или так:
C#
1
2
3
string num = "123456789";
var groups = num.GroupBy(x => x%2).ToList();
Console.WriteLine("Чётных: {0}\tНечётных: {1}", groups[1].Count(), groups[0].Count());
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.02.2015, 18:23 8

Не по теме:

insite2012, прям как мой вариант.. Только я без использования LINQ, с циклом

C#
1
2
3
foreach(int ch in str)
    if(ch - '0' % 2 == 0)
        ++even;
А затем также (ну разве что к вещественному типу знаменатель я не стал приводить, т.к. методом "научного тыка" выявил, что не нужно)
Правда, потому я решил не позориться и не стал выкладывать его))


Как вариант, очевидный с числами:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter number from 100 to 1000000000: ");
            string number = Console.ReadLine();
            int num = 0;
            int even = 0;
            int even = 0;
            if (number.Length < 3 || number.Length > 9 || !int.TryParse(number, out num))
                throw new ArgumentException("Argument error!");
            
            while((num /= 10) != 0)
                if(num % 2 == 0)
                    ++even;
            
            odd = number.Length - even;
            Console.WriteLine("Odd numbers persents: {0}%",  100.0 * odd / number.Length);
            Console.WriteLine("Even numbers persents: {0}%", 100.0 * even / number.Length);
            Console.ReadLine();
        }
    }
}
Хотя проверка на верное число все равно неверная, надо как-то так тогда
C#
1
string number = Convert.ToInt16(Console.ReadLine()).ToString();
insite2012, введи число-"повторюшку" - 111, 222 и т.д.
0
insite2012
10.02.2015, 18:34
  #9

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
insite2012, прям как мой вариант..
KOPOJI, говорят, у этих, ну как их, мысли сходятся. :)

0
KOPOJI
10.02.2015, 18:39
  #10

Не по теме:

у этих, ну как их
Ага, у модеров)

0
Master of Orion
Эксперт .NET
6092 / 4948 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.02.2015, 19:37 11
Блин, а мой вариант косячный. Взял не глядя чужой код, а фигню не приметил

Про FAQ с матрицами - прекрасная идея. Можно её много подо что подогнать, например задачи.

1. Решение в общем виде задачи "найти сумму ряда" - тут сложность в том, что есть любители использовать Math.Pow, когда как намного лучше найти множитель ряда и на него домножать рекурсивно.
2. Решение в общем виде задачи "определить, попадает ли точка в заданный сектор" - без комментариев.
3. Пример написания общего кода для консоли, формы, и формы WPF, иллюстрация факта, что классы предметной области нужно выделять отдельно, и они ничего не должны знать о своем использовании с внешним миром, только друг с другом.

Ну так, на вскидку.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2015, 19:37
Помогаю со студенческими работами здесь

Подсчитать количество цифр в числе, используя рекурсивный метод
Написать рекурсивный метод и вызвать его в методе Main. Подсчитать, используя рекурсивный метод,...

Подсчитать количество цифр в числе не превосходящих заданной цифры, введённой с клавиатуры
совсем никак не могу понять логику

Вывести количество цифр в числе и сумму этих цифр
Натуральное число A, А&lt;100, написать программу которая выводит количество цифр в этом числе и сумму...

Подсчитать сколько одинаковых цифр в числе
Помогите написать код для под считки одинаковых цифр в числе. Вот для этого кода: class Program ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru