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

Выяснить, различны ли все три цифры этого числа.

30.01.2018, 21:25. Показов 1224. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вводится натуральное трёхзначное число n.Выяснить,различны ли все три цифры этого числа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2018, 21:25
Ответы с готовыми решениями:

Дано четырехзначное число: выяснить различны ли все цифры этого числа?
Помогите пожалуйста написать код

Выяснить, различны ли все цифры заданного четырёхзначного натурального числа
Составить алгоритм, написать программу на языке программирования С++, отладить программу на ПК....

Дано натуральное число, меньше 1000. Верно ли, что все цифры этого числа различны?
Дано натуральное число, меньше 1000. Верно ли, что все цифры этого числа различны? заранее спасибо...

Число-перевертыш, три одинаковые цифры, все цифры различны
Дано натуральное четырехзначное число n. Определить: 1. является ли это число палиндромом...

13
1287 / 880 / 254
Регистрация: 30.06.2015
Сообщений: 4,592
Записей в блоге: 51
31.01.2018, 12:22 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int main(void)
{ 
    int a;
    scanf("%3d", &a);
    if(a>99 && a<=999)
    { 
        int n, k, kp=10, m=1;
        for(n=a; n; n=n/10)
        {
            k=n%10;
            if (k==kp)
            { 
                m=0; 
                break;
            } 
            kp=k;
        }
        if (m) printf("Yes\n");
        else printf("No\n");
    }
  return 0;
}
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
31.01.2018, 13:06 3
CoderHuligan, подайте на вход 101
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(void){
  int n;
  char a1,a2;
  scanf("%i", &n);
  if(n<100 || n>999){
    printf("Wrong number\n");
    return 1;
  }
  a1 = n%10; n/=10;
  a2 = n%10; n/=10;
  if(a1 != a2 && a1 != n && a2 !=n){
    printf("Not equal\n");
  }else{
    printf("Equal\n");
  }
}
0
1287 / 880 / 254
Регистрация: 30.06.2015
Сообщений: 4,592
Записей в блоге: 51
31.01.2018, 14:02 4
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
подайте на вход 101
Подал. Ничего не изменилось - выдаёт "Yes", т. е. "да, различны"
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
31.01.2018, 14:21 5
А, тогда это я неправильно понял задание
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.02.2018, 09:27 6
Нашел вот в сети такую штуку:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int test(int x)
{
    int f = 0;
    for (; x; x /= 10) f += 1 << x % 10 * 3;
    return !(f & 920350134);
}
 
int main(void)
{
    for (int i = 100; i < 1000; i++) if (test(i)) printf("%3d ", i);
    return 0;
}
Автор уверяет, что работает вплоть до семизначных целых.
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.02.2018, 11:43 7
C
1
if (n % 111 == 0)....
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.02.2018, 12:18 8
Байт, не, тут все цифры должны различаться.
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.02.2018, 12:26 9
Цитата Сообщение от HighPredator Посмотреть сообщение
тут все цифры должны различаться.
Да, прошу прощения, криво прочел условие...
А вот в логику вашего решения никак не могу врубиться...
Зато могу предложить такой вариант
C
1
2
3
4
5
int testb(int x)
{ 
  int a = x%10, b = (x/10)%10, c = x/100;
  return (a-b)*(a-c)*(b-c);
}
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.02.2018, 12:36 10
Байт, а оно не мое и я тоже не могу врубиться)) некогда разобрать
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.02.2018, 13:01 11
Цитата Сообщение от HighPredator Посмотреть сообщение
я тоже не могу врубиться
Кажется, догадался. Достаточно перевести магическое число 920350134 в 2-ичную или хотя бы 8-ричную с/с (чего я делать не стал). Это такая своеобразная "шкала". На каждую цифру 0-9 отводится по 3 бита. Ели цифра встречается 1 раз - эти биты 001. 2 раза - 010, 3 раза - 011. Критерием является наличие 1 во втором бите.
Не понимаю, правда, зачем 3 бита, а не 2. Чтобы число было пострашнее?
Но остроумно, конечно. Возьму на вооружение - пугать новичков

Добавлено через 4 минуты
Цитата Сообщение от Байт Посмотреть сообщение
Не понимаю, правда, зачем 3 бита, а не 2
Понял. Тогда можно рассматривать числа до 7 знаков.
4 бита при 32-х разрядах уже нельзя. При 64-х можно до 6-ти битов с применимостью к числам до 31 знаков.
Славненько!
2
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
01.02.2018, 13:12 12
Цитата Сообщение от HighPredator Посмотреть сообщение
int test(int x)
C
1
2
3
4
5
{
    int f = 0;
    for (; x; x /= 10) f += 1 << x % 10 * 3;
    return !(f & 920350134);
}
Кажется, разобрался.
1<<x%10*3 это установка бита, стоящего на ai*3 позиции, где ai - i-я цифра числа. То есть если дано число 123 то выставлены будут биты 3, 6, 9. Между битами, соответствующим разным цифрам остается 3 двоичных разряда, то есть одно и то же число может быть сложено 7 раз прежде чем полезет в следующий разряд (отсюда ограничение на 7 цифр). Иначе говоря, каждая тройка битов считает количество вхождений данной цифры.
Последний этап - зануление каждого 3-го бита, тех самых, которые выставляются при однократном вхождении каждого числа. Если а оставшихся разрядах что-то есть, то какое-то число входило больше одного раза.
2
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.02.2018, 13:27 13
Цитата Сообщение от Байт Посмотреть сообщение
с применимостью к числам до 31 знаков.
Что, однако, совершенно лишено смысла, ибо любое более чем 10-значное число обязательно имеет одинаковые цифры. Разве только для других систем счисления...

Добавлено через 8 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Иначе говоря, каждая тройка битов считает количество вхождений данной цифры.
Да, слово "счетчик" тут более уместно.
Автор алгоритма просто впихнул эти счетчики в одно целое число.
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
01.02.2018, 13:53 14
Не "просто впихнул" а довольно красиво распихал по 32-битному числу с достаточно быстрым доступом. Хотя, конечно, деление не самая быстрая операция, но, по крайней мере, нет обращения к элементам массива отдельных счетчиков или чему-то подобному.
Решение красивое, но все равно вырвиглазное

Добавлено через 12 минут
Изобрел другой вариант, он не считает количество повторов, только их наличие:
C
1
2
3
4
5
6
7
8
char test2(uint64_t x){
  uint16_t f=0;
  do{
    if( f & (1<<x%10) )return 0;
    f |= (1<<x%10);
  }while(x/=10);
  return 1;
}
1
01.02.2018, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2018, 13:53
Помогаю со студенческими работами здесь

Выяснить, различны ли цифры данного числа
Дано натуральное число n (n &lt; 9999). Выяснить, различны ли все четыре цифры этого числа (если оно...

Подсчет натуральных чисел, в которых все три цифры различны
Подсчитать количество натуральных чисел 102\leq n\leq 987 , в которых все три цифры различны. Как...

Написать программу для натурального числа, в котором нужно выяснить различны ли его цифры
Ребят, программа легкая по-любому, но я никак не могу додуматься, помоги те пожалуйста! Задание:...

Подсчитать количество натуральных чисел, в которых все три цифры различны
Подсчитать количество натуральных чисел n (102 &lt;= n &lt;= 987), в которых все три цифры различны

Поменяйте местами наибольшую и наименьшую цифры числа, учитывая, что в числе все цифры различны
Поменяйте местами наибольшую и наименьшую цифры числа, учитывая, что в числе все цифры различны.

Все ли цифры числа различны?
Дано натуральное число(ввод с клавиатуры) Здрасти всем... вообщем тут такая задачка сразу скажем...


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

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

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