我正在进行在线挑战,挑战如下: “孩子们正在玩一个名为”计数数字“的游戏。对于给定数字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 :(得分: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)
您通常使用此类任务执行的操作是计算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
,将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;”应该没问题。