0

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

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

4

5 回答 5

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;
}
于 2013-03-02T10:37:51.190 回答
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;
}
于 2013-03-02T10:42:21.610 回答
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);
    }
}
于 2013-12-11T15:26:35.863 回答
0

您通常对此类任务所做的是计算和之间的数字0S然后0减去K这些数字。

0和之间有多少个767?首先数最后一位的数字。有77时间 0, 1, 2, 3, 4, 5, 6, 7 和时间 8和769。更正式地说,在其余部分767/10+1之间。然后计算 的最后一位数字的出现次数,乘以,加上时间 7 和 6(对于最后一位的错误)并对剩余的数字执行相同的操作,这里。最后,将结果相加。0767%10767/10+1767/10=7610776/10=7

这解决了中的问题O(log_10 K)

于 2013-03-02T10:31:34.217 回答
0

试试这个代码:

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

        //count tempDigit here
    }
}

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

于 2013-03-02T10:38:56.417 回答