Нахождение сколько конкретной цифры появляется в массиве чисел (C ++)

Я делаю онлайн-вызов, и задача заключается в следующем:
«Дети играют в игру под названием« Подсчет цифр ». Для заданных чисел S и K они сначала записывают все числа между этими цифрами, а затем подсчитывают, сколько раз появляется каждая цифра (0,1,2,3,4,5,6). , 7,8,9). Например, S = 767, K = 772, цифры будут: 767,768,769,770,771,772

Итак, 0 покажет один раз (в 770), 1 покажет один раз (в 771) и так далее ..

В основном моя программа должна делать следующее (данный пример):

Входные данные:
1 9
(Это номера 1,2,3,4,5,6,7,8,9)

Выход:
0 1 1 1 1 1 1 1 1 1
(0 не показывает, другие цифры показывают один раз). «

Я застрял в этом коде … из идей.

#include <iostream>

using namespace std;

int main()
{
int s,k;
int array[10];
int c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0;
cin >> s >> k;
int saves = s;
int savek = k;
cout << s%10;
for(int i=s;i<=k;i++)
{
int savei=i;
while(savei!=0)
{
savei=savei%10;
}
}

Любой псевдокод / ​​фрагмент / код / ​​подсказка приветствуется.

0

Решение

Чисто численное решение чисто числовой задачи:

#include <iostream>

int main()
{
int s, k, i, tmp;
std::cin >> s >> k;

int count[10] = { 0 };

for (i = s; i <= k; i++) {
tmp = i;
do {
count[tmp % 10]++;
tmp /= 10;
} while(tmp);
}

for (i = 0; i < 10; i++) {
std::cout << i << " appears " << count[i] << " times" << std::endl;
}

return 0;
}
2

Другие решения

Мое решение таково:

int main(){
int s,k;
cin >> s >> k;
int numbers[10]={0};
string sum;

for(int i=s;i<=k;i++)
{
sum=to_string(i);
for(int i=0;i<sum.length();i++){
numbers[(int)sum.at(i)-48]++;
}
}

for(int i=0;i<10;i++){
cout<<numbers[i]<<endl;
}

return 0;
}
1

public static void getDigitsInBook(int n) {
for(int i=0;i<10;i++) {
int x = n,val=0,k=1;
while(x!=0) {
int left  = x/10;
int num = x%10;
int right = n%k;
if(i == 0) {
val = val+ (left*k);
}
else if(i<num) {
val = val + ((left+1)*k);
}
else if(i==num) {
val = val + (left*k) + right+1;
}
else {
val = val+ (left*k);
}
k=k*10;
x = n/k;
}
System.out.println(val);
}
}
1

Что вы обычно делаете с такими задачами, это вычисление числа между 0 а также S и между 0 а также K и вычитая их.

Сколько между 0 а также 767? Сначала посчитайте цифры последней цифры. Есть 77 раз 0, 1, 2, 3, 4, 5, 6, 7 каждый и 76 раз 8 и 9. Более формально, 767/10+1 между 0 а также 767%10 а также 767/10+1 на отдыхе. Затем рассчитайте количество вхождений последней цифры для 767/10=76, умножить на 10, добавлять 7 раз 7 и 6 (для ошибки на последнем) и сделать то же самое для оставшихся цифр, здесь 76/10=7, Наконец, добавьте результаты.

Это решает проблему в O(log_10 K),

0

попробуйте этот код:

for(int n=s ; n<=k ; n++)
{
tempN = abs(n);
while(tempN > 0)
{
tempDigit = tempN % 10;
tempN /= 10;

//count tempDigit here
}
}

предполагая, что ваши переменные являются целыми числами, «tempN / = 10;» должно быть никаких проблем.

0
По вопросам рекламы [email protected]