查找特定数字在数组中出现的数量(C ++)

时间:2013-03-02 10:22:43

标签: c++ arrays numbers digit

我正在进行在线挑战,挑战如下: “孩子们正在玩一个名为”计数数字“的游戏。对于给定数字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;
        }
    }

赞赏任何伪代码/代码段/代码/提示。

5 个答案:

答案 0 :(得分:2)

纯数字问题的纯数字解决方案:

#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;
}

答案 1 :(得分:1)

我的解决方案是这样的:

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;
}

答案 2 :(得分: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);
    }
}

答案 3 :(得分:0)

您通常使用此类任务执行的操作是计算0S之间以及0K之间的数字,然后减去这些数字。

0767之间有多少?首先计算最后一位数字。有77次0,1,2,3,4,5,6,7和76次8和9.更正式地,767/10+1介于0767%10之间其余的767/10+1767/10=76。然后计算10的最后一位数的出现次数,乘以7,将76/10=7乘以7和6(对于最后一位的错误)并对其进行相同的操作剩下的数字,这里是O(log_10 K)。最后,添加结果。

这解决了{{1}}中的问题。

答案 4 :(得分:0)

试试这段代码:

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

        //count tempDigit here
    }
}

假设你的变量是整数,“tempN / = 10;”应该没问题。