#c #arrays #boolean
#c #массивы #логическое
Вопрос:
Привет, удалось проверить мою программу, если я повторил 8. Я также хочу распечатать, сколько повторяющихся 8 я сохранил в массиве.
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
bool digit_seen[10] = {false};
int digit=0;
long n;
printf("Enter number: ");
scanf("%ld", amp;n);
while (n>0)
{
digit = n % 10;
if (digit_seen[digit])
{
break;
}
digit_seen[digit] = true;
n/=10;
}
if (n>0 amp;amp; digit ==8)
{
printf("Repeated 8's");
}
else
{
printf("No 8's found");
}
return 0;
}
Комментарии:
1. Подсказка: вместо
digit_seen[digit]=true
, попробуйтеdigit_count[digit]
Ответ №1:
Если я понимаю вашу проблему, вы хотите знать количество случаев, когда 8 находится в вашем номере. Например, 88 имеет 2 8s. Если это так, я не понимаю, почему вы используете логический массив. Во-первых, вам нужен счетчик. Во-вторых, вам нужно знать, равна ли цифра 8 для каждой цифры, и увеличить этот счетчик, если это 8. Вот пример :
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
int digit=0;
long n;
int counter = 0;
printf("Enter number: ");
scanf("%ld", amp;n);
while (n>0)
{
digit = n % 10;
if(digit == 8)
{
counter ;
}
n/=10;
}
if (counter > 0)
{
printf("Repeated 8's");
}
else
{
printf("No 8's found");
}
return 0;
}
В этом примере счетчик будет иметь количество вхождений 8 в вашем номере. Просто отобразите его в printf, и все готово.
РЕДАКТИРОВАТЬ: вот решение с использованием массива:
#include <stdio.h>
int main(void)
{
int digit = 0;
long n;
int arrayNumber[10] = {0};
printf("Enter number: ");
scanf("%ld", amp;n);
while (n>0)
{
digit = n % 10;
arrayNumber[digit] ;
n /= 10;
}
if (arrayNumber[8] > 0)
{
printf("Repeated 8's");
}
else
{
printf("No 8's found");
}
return 0;
}
Таким образом, вы будете знать вхождение каждого числа от 0 до 9 в вашем целом числе. Я бы также отметил, что вам нужно определить, что такое повторяющееся число. Если это происходит, когда есть хотя бы 2 вхождения, вам нужно изменить arrayNumber[8] > 0
на arrayNumber[8] > 1
Комментарии:
1. есть ли способ решить это с помощью array? например, перебирать каждый элемент, чтобы проверить, есть ли 8, а затем распечатать все 8?
2. Вы хотите знать каждую позицию 8 в вашем числе? В противном случае, если вы печатаете только 8 секунд без какой-либо другой информации, добавьте printf в блок if, и все готово. Если вы хотите знать каждую позицию 8, я думаю, было бы лучше напечатать число в массиве символов. и выполните итерацию по нему с помощью цикла for .
3. В моем назначении конкретно не указано, что мне нужна позиция, но в нем указано, что мне нужно использовать array.
4. Я отредактировал свой пост в соответствии с информацией, которую вы мне дали
5. О, и обратите внимание, что это будет работать только для диапазона long, если ваш номер может содержать неограниченное количество цифр, я бы посоветовал вам использовать массив символов.