Работа с символьными массивами (наверное)

  • Автор темы Rivass
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rivass

#1
Вот есть задачка:

Вводится целое число A. Проверить наличие в записи числа одинаковых цифр (вы-вести yes, если одинаковые цифры найдены, иначе вывести no). Проверку реализовать через функцию. (Язык C)

Я примерно понимаю что нужно вносить в массив каждую цифру числа, но не могу себе представить как это сделать.... До этого писал программу, но она была по проще и решалась арифметически... Тогда требовалось найти сумму введенного четерехзначного числа...
Вот как я её тогда решил:
C++:
#include <stdio.h>
int A;
void main() {
printf ("Type number 4 symbols=",A);
scanf_s ("%d",&A);
int S=A/10;
S=A-(S*10);
int K=A/100;
int B=K;
K=((A-(K*100))-S)/10;
int F=A/1000;
int C=B-(F*10);
int Z=S+K+F+C;
printf_s ("Numbers summ=%d\n",Z);
}
К сожалению сейчас я таким способом не напишу универсальную программу для решения задач такого типа, поэтому прошу вашей помощи....
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
C++:
/*
Вводится целое число A. Проверить наличие в записи числа одинаковых цифр (вы-вести yes, если одинаковые цифры найдены, иначе вывести no).
Проверку реализовать через функцию. 
*/
#include <iostream>
#include <ctype.h> // для isdigit

using namespace std;

void main(void)
{
setlocale(LC_ALL,"Russian");
int Arr[10]= {0}; //Наш массив цифр
char buffer[1024]={0}; //Буферная переменная под строку
cout<<"Введите целое число : ";
gets(buffer); //Получим строку

for (int i=0; i< strlen(buffer); i++)
if (isdigit(unsigned char(buffer[i])))
{	
Arr[buffer[i]-'0']++;
}

for (int i = 0; i<=9; i++)
cout<<"Цифр '" << i << "' ="<< Arr[i]<< endl;

//Условие задание
for (int i = 0; i<=9; i++)
if (Arr[i]>0)
{
cout<<"Yes!!! Одиноковые цифры найдены"<< endl;
return;
}
cout<<"No!!! Нет одинаковых цифр"<< endl;
}
В функцию вынеси Сам...
Язык С - замени Сам coutы на printfы...
 

acorn

PHP Developer
29.08.2004
585
3
#3
Я примерно понимаю что нужно вносить в массив каждую цифру числа, но не могу себе представить как это сделать...
первый вариант: ввести число как строку, а строка - это массив
второй вариант: в цикле делать остаток от деления на 10 - получаем последнюю цифру, делаем целочисленное деление на 10 - получаем число без последней цифры, и так пока число не ноль.

DarkKnight125
массив arr достаточно сделать булевским с дефолтным значением false и при первой же попытки сделать true переменную, которая уже true выводить 'yes'.. но это мелочи.
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
второй вариант: в цикле делать остаток от деления на 10 - получаем последнюю цифру, делаем целочисленное деление на 10 - получаем число без последней цифры, и так пока число не ноль.
Вариант не плохой, жаль только лимит очень уж маленький...
Я тоже первоначально подумал про него, но потом все же подумал что пользователю все же захочется ввести уж очень много цифр...
 
Статус
Закрыто для дальнейших ответов.