bool scan_digits(unsigned int number)
{
int count[10] = { 0 };
for ( ; number; number /= 10)
{
int digit = number % 10;
if (++count[digit] > 1)
return (true);
}
return (false);
}
Числа, содержащие неповторяющиеся цифры(С).
Надо написать прогу:
С клавиатуры вводятся натуральные числа. Выводятся на экран только те числа, которые не содержат повторяющийхся цифр.
Пример: 123, 144, 155, 222, 153, 187, 200.
Вывод на экран: 123, 153, 187.
какую функцию использовать для данной программы?
Заранее спасибо.
[COLOR="Red"]
Такие названия тем, как help или Помогите у нас на форуме не принято давать, язык программированя в названии указывать, читаем Правила раздела Студентам. На первый раз устное предупреждение.[/COLOR]модератор.
:rolleyes:как вариант вводишь массив натуральных чисел, после чего с помощью цикла for сравниваешь эти числа(елементы массива) ;)
Язык не помешало бы указать. Если нужен c++, то я бы сделал контейнер со строками, загрузил в него все, поразвлекался с unique: если возращает нужный итератор, то вывести.
и у меня тут ещё вариант с делением по модулю появился..и со сравнением последующим.
Думаю подойдёт функция CheckDecimalNumberForEqualDigitsAndPrintIfNo, вызываемая в цикле. ;-)
А есле серьёзно, то вы уже наверное заметили, что вместе с компилятором идёт набор функций, осуществляющих наиболее низкоуровневые операции, дабы из них составлять необходимые более сложные процедуры.
[QUOTE=luxury]и у меня тут ещё вариант с делением по модулю появился..и со сравнением последующим.[/QUOTE]
Телепатируйте!
cin>>a;
//сдесь подобрать результат от целочисленного деления и сравнения (поразрядно)
if (true) cout<<a;
если С, то использовать getch(); и printf();
Цитата: luxury
какую функцию использовать для данной программы?
Такую, в которой прверяется, имеются ли в числе повторяющиеся цифры.
Например, эту:
Код:
Код:
//#include "stdafx.h"
//разкомментировать в Visual Studio
#include <math.h>
#include <stdio.h>
#include <math.h>
bool RepeatDigits(unsigned short int );
int main(){
unsigned short int /* чтобы знать сколько цифр сравнивать между собой
в случае ввода максимально большого числа для данного типа..
в нашем случае 5, т.к Unsigned Short Int - 0..65535 (5 цифр)*/
Numbers[5];
int
x;
printf("Enter 5 numbers\n");
for(int i=0;i<5;i++){ // начинаем вводить данные в промеж. перем.
while(true){ // а затем заполнять массив
printf("%d) ",i+1); //декоративности
scanf("%d",&x); // вводим натуральное число
if(x<0)
x = abs(x); // если не натуральное ввёл.. преподаватели любят искать баги
if(x<65535 && x>0)// дабы не выйти за пределы ансигнэд шорт инт
break;
else
printf("Again, please\n");
}
Numbers = x; // а только теперь помещаем в массив
}
printf("\n");
for(int i=0;i<5;i++)
if( !RepeatDigits(Numbers) ) // Если нет повтора в цифрах то вывод
printf("%hu ",Numbers);
printf("\n");
return 0;
}
bool RepeatDigits(unsigned short int x){
bool Repeat = false;
int
digits[5], //массив для цифр
count = 0,
i,j;
while(x%10){ // здесь мы рвём число на цифры и заносим в массив
digits[count] = x%10;
x /= 10;
count++;
}
for(i=0;i<count;i++) // проверка на повтор
for(j=i+1;j<count;j++)
if(digits==digits[j])
Repeat = true;
return Repeat; //в случае повтора - truе, не_повтора - false
}
//разкомментировать в Visual Studio
#include <math.h>
#include <stdio.h>
#include <math.h>
bool RepeatDigits(unsigned short int );
int main(){
unsigned short int /* чтобы знать сколько цифр сравнивать между собой
в случае ввода максимально большого числа для данного типа..
в нашем случае 5, т.к Unsigned Short Int - 0..65535 (5 цифр)*/
Numbers[5];
int
x;
printf("Enter 5 numbers\n");
for(int i=0;i<5;i++){ // начинаем вводить данные в промеж. перем.
while(true){ // а затем заполнять массив
printf("%d) ",i+1); //декоративности
scanf("%d",&x); // вводим натуральное число
if(x<0)
x = abs(x); // если не натуральное ввёл.. преподаватели любят искать баги
if(x<65535 && x>0)// дабы не выйти за пределы ансигнэд шорт инт
break;
else
printf("Again, please\n");
}
Numbers = x; // а только теперь помещаем в массив
}
printf("\n");
for(int i=0;i<5;i++)
if( !RepeatDigits(Numbers) ) // Если нет повтора в цифрах то вывод
printf("%hu ",Numbers);
printf("\n");
return 0;
}
bool RepeatDigits(unsigned short int x){
bool Repeat = false;
int
digits[5], //массив для цифр
count = 0,
i,j;
while(x%10){ // здесь мы рвём число на цифры и заносим в массив
digits[count] = x%10;
x /= 10;
count++;
}
for(i=0;i<count;i++) // проверка на повтор
for(j=i+1;j<count;j++)
if(digits==digits[j])
Repeat = true;
return Repeat; //в случае повтора - truе, не_повтора - false
}