计数问题

每日一练社区 2022-06-17 14:33:35

试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9) 共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。

输入描述:

2 个整数 n,x ,之间用一个空格隔开。

输出描述:

1 个整数,表示 x 出现的次数。

输入样例:

11 1

输出样例:

4

返回练习题答题页面

...全文
6282 175 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
175 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐沐森的故事 2024-01-07
  • 打赏
  • 举报
回复

using System.Text.RegularExpressions;
using UnityEngine;

public class DigitCountRegex : MonoBehaviour
{
    public int CountDigitsInRange(int n, int x)
    {
        string fullString = string.Join("", GetNumbersInRange(1, n));
        string pattern = x.ToString();
        int count = Regex.Matches(fullString, pattern).Count;
        return count;
    }

    private string[] GetNumbersInRange(int start, int end)
    {
        string[] numbers = new string[end - start + 1];
        for (int i = start; i <= end; i++)
        {
            numbers[i - start] = i.ToString();
        }
        return numbers;
    }

    void Start()
    {
        int n = 11; // 区间的上限值
        int x = 1;  // 要统计出现次数的数字

        int result = CountDigitsInRange(n, x);
        Debug.Log("数字 " + x + " 在区间 [1, " + n + "] 中出现了 " + result + " 次。");
    }
}

CSDN-Ada助手 2024-01-07
  • 举报
回复
@沐沐森的故事 您的代码实现了计算在区间1到n中数字x出现的次数的功能,使用了Regex来进行匹配统计。这样可以很方便地得到数字x在区间内出现的次数。很好的解决了计数问题。
Sᴛᴏʀʏ .749 2023-11-21
  • 打赏
  • 举报
回复 1
Ctrl+C   Ctrl+V
CSDN-Ada助手 2023-12-26
  • 举报
回复
@Sᴛᴏʀʏ .749 对不起,我不太明白你的意思。你可以再解释一下吗?
挂机1年 2023-11-18
  • 打赏
  • 举报
回复

list = []
n = input('请输入想要查找的数字: ')
c = 0 #计数

x = input('请输入')
for v in range(int(x)):
    list.append(v)
for v in list:
    v = str(v)
    print(v)
    for v_0 in v:
        if n == v_0:
            c += 1

print(f'{n}共出现了{c}次')
CSDN-Ada助手 2023-12-26
  • 举报
回复
@挂机1年 你可以尝试使用以下代码来计算数字在区间 1 到 n 中出现的次数: ```python n = int(input('请输入想要查找的数字: ')) x = int(input('请输入一个整数: ')) count = 0 for num in range(1, n+1): for digit in str(num): if int(digit) == x: count += 1 print(f'{x}共出现了{count}次') ``` 这样就可以计算出数字 x 在区间 1 到 n 中出现的次数了。希望对你有帮助!
  • 打赏
  • 举报
回复

取余数

CSDN-Ada助手 2023-12-26
  • 举报
回复
@小邓苦苦学编程 你好,请问有什么关于取余数的问题需要帮助吗?
谦善 2023-11-17
  • 打赏
  • 举报
回复

def main(a,b,c):
        d = ''
        for i in range(a,b+1):
                d += str(i)
        print(d.count(c))
if __name__ == '__main__':
        a = int(input('请输入第一个数字'))
        b = int(input('请输入最后一个数字'))
        c = str(input('请输入出现的数字(0~9)'))
        main(a,b,c)

CSDN-Ada助手 2023-12-26
  • 举报
回复
@谦善 你的代码是正确的,可以计算出在指定区间内某个数字出现的次数。感谢你的分享!
新华 2023-11-15
  • 打赏
  • 举报
回复 1
#include <stdio.h>

int main() {
    // 输入
    int n, x;
    scanf("%d %d", &n, &x);

    // 计算数字x在区间1到n内的出现次数
    int count = 0;
    for (int i = 1; i <= n; ++i) {
        int num = i;
        while (num > 0) {
            if (num % 10 == x) {
                count++;
            }
            num /= 10;
        }
    }

    // 输出结果
    printf("%d\n", count);

    return 0;
}


CSDN-Ada助手 2023-12-26
  • 举报
回复
@新华 你的代码实现了计算数字x在区间1到n内的出现次数的功能,很好!如果需要对这段代码进行优化,可以考虑减少不必要的循环和计算,以提高效率。另外,你还可以尝试使用其他方法来解决这个计数问题,比如递归或者数学公式推导。希望能对你有所帮助!
chflong 2023-11-14
  • 打赏
  • 举报
回复

n=input("请输入数字区间:")
list=[]

for number in range(0,10):
list.append(0)
for temp in range(1,int(n)+1):
list[number]=list[number]+str(temp).count(str(number))

print(f"数字{number}出线{list[number]}次")
CSDN-Ada助手 2023-12-26
  • 举报
回复
@chflong 你的代码看起来有一些错误,需要进行一些修正。首先,你需要将输入的字符串转换为整数n,可以使用int()函数来实现。其次,你可以使用一个循环来计算所有数字的出现次数,而不是计算单个数字的出现次数。希望这些提示对你有帮助。
sfd8888 2023-11-08
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("输入n和x\n");
int n, x, i, j, p, a;
a = 0;
scanf("%d %d", &n, &x);
int* arr = (int*)malloc(n * sizeof(int));
if (0 > x || x > 9)
{
printf("error scanf");
free(arr);
return 0;

}
j = 0;

for (i = 0; i < n; i++)
{
    arr[i] = i+1;
}

for (j = 0; j < n; j++)
{
    p = arr[j] % 10;
    if (p == x)
    {
        a = a + 1;
    }

}


printf("sum= % d", a);

free(arr);

return 0;

}

CSDN-Ada助手 2023-12-26
  • 举报
回复
@sfd8888 您好,感谢您的代码分享。根据您的代码逻辑,您通过计算数组中每个数的个位数来统计数字x出现的次数,这是一种有效的方法。不过,您可能需要考虑一些边界情况,比如输入的n和x的范围是否符合要求。祝您编程顺利!
空白。959 2023-11-06
  • 打赏
  • 举报
回复 1
a = int(input("查询到"))
x = int(input("要查询的数"))
geshu = 0
for i in range(0, a+1):
    if (0
CSDN-Ada助手 2023-12-26
  • 举报
回复
@空白。959 你好!根据你的输入,我将帮你计算数字 x 在区间 1 到查询到的整数中出现的次数。让我来帮你计算一下。
  • 打赏
  • 举报
回复

#include
using namespace std;
int ab(int a, int b) {
int c;
for (int i = 1; a >= 1; i++) {
c = i;
a /= 10;
}
return c;
}//输出有多少位
int aa(int a, int b) {//a是某个整数,b是出现的数字
int k=ab(a, b);//k是位数
int* bb = new int[k];
int d = 0;
for (int i = 0; i<k; i++) {
bb[d] = a % 10;
d++;
a /= 10;
}
int sum = 0;
for(int j=0;j<=k; j++) {
if (bb[j] == b)sum += 1;
}

return sum;

}
int main() {
int c,b;
cin >> c>>b;
int sum1 = 0;
for (int i = 1; i < c + 1; i++) {
sum1 += aa(i, b);
}
cout << "总的为" << sum1 << endl;
system("pause");
return 0;
}

新大一,纯新手,欢迎指正

CSDN-Ada助手 2023-12-26
  • 举报
回复
@老天爷不赏饭吃 你好,欢迎来到CSDN!首先,欢迎你开始学习编程,希望你能在这个领域有所收获。关于你的代码,我注意到你定义了两个函数ab和aa来计算一个数字中某个数字出现的次数。你的思路是对的,但是在aa函数中有一些小错误,比如for循环中的条件应该是j < k而不是j <= k。另外,你在函数末尾缺少了return sum;语句。希望我的指导对你有所帮助,加油!如果还有其他问题,欢迎继续提问。
Mornwind. 2023-11-02
  • 打赏
  • 举报
回复
n,x=input().split(" ")
num=0
for i in range(1,int(n)+1):
    num+=str(i).count(x)
print(num)
CSDN-Ada助手 2023-12-26
  • 举报
回复
@Mornwind. 你的代码逻辑是正确的,可以计算出数字 x 在区间 1 到 n 中出现的次数。如果有其他问题需要帮助,请随时问我。
  • 打赏
  • 举报
回复

# 数学逻辑:先个位判断,再到十位及以上
n = int(input("最大范围(-1): "))
x = int(input("输入要统计的数: "))
count = 0
y = 0
for i in range(1, n):
    if(0 < i < 10):
        if(i == x):
            print(i)
            count += 1
    else:
        while(i != 0):
            # 判断 i 的最后一位等不等于 x,等于count+1
            y = i % 10
            if (y == x):
                print(y)
                count += 1
            # 去除 i 的最后一位数
            i = i // 10
print(f"{x}出现次数是:{count}")
CSDN-Ada助手 2023-12-26
  • 举报
回复
@随性而作的码农 您的代码逻辑基本正确,但是有一个小问题,您的循环范围应该是从1到n+1而不是1到n,因为题目要求包括n在内的所有整数。另外,在判断个位数时,可以直接使用i % 10 == x 来判断,不需要再单独判断0 < i < 10。希望我的建议对您有所帮助。
懒得写了 2023-10-11
  • 打赏
  • 举报
回复

img

CSDN-Ada助手 2023-12-26
  • 举报
回复
@懒得写了 在Vue中使用插槽不仅仅是为了解决组件美观问题,它还可以帮助我们更好地组织和管理组件之间的内容和交互。通过插槽,我们可以更灵活地定制组件的外观和行为,使得组件更加通用和易于重用。
一枚小爪哇 2023-10-10
  • 打赏
  • 举报
回复

  public static void main(String[] args) throws Exception {
    //
    System.out.println("输入2个整数 n,x ,之间用一个空格隔开");
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int x = scanner.nextInt();
    if ((x < 0 || x > 9)) {
      throw new Exception("x(0 ≤ x ≤ 9)");
    }
    if (n < 1) {
      throw new Exception("n必须大于等于1");
    }
    StringJoiner stringJoiner = new StringJoiner(",");
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i <= n; i++) {
      stringJoiner.add(String.valueOf(i));
      sb.append(i);
    }
    String str = sb.toString();
    int num = 0;
    for (int i = 0; i < str.length(); i++) {
      int c = Integer.parseInt(String.valueOf(str.charAt(i)));
      if (c == x) {
        num += 1;
      }
    }
    System.out.println(x + "在[" + stringJoiner + "]中出现" + num + "次");
  }

img

CSDN-Ada助手 2023-12-26
  • 举报
回复
@一枚小爪哇 你的代码逻辑基本正确,但是可能存在一些不必要的复杂性。你可以简化代码,直接使用字符串拼接和遍历来计算数字x出现的次数。另外,你也可以考虑将输入和计算分离成不同的函数,提高代码的可读性和复用性。希望这些建议对你有帮助。
青色° 2023-10-08
  • 打赏
  • 举报
回复
public static void main(String[] args) {
    System.out.println("请输入2个整数n,x。之间用,隔开!");
    Scanner sc = new Scanner(System.in);
    String[] split = sc.next().split(",");
    Integer n = Integer.parseInt(split[0]);
    Integer x = Integer.parseInt(split[1]);
    String str = "";
    for (int i = 1; i <= n; i++) {
        str += i + "";
    }
    String y = str.replaceAll(x.toString(), "");
    System.out.println(x + "出现的次数为:" + (str.length() - y.length()));
}
CSDN-Ada助手 2023-12-26
  • 举报
回复 1
@青色° 你的代码实现了计算数字 x 在区间 1 到 n 中出现的次数,但是需要注意一些细节。首先,输入应该用空格隔开而不是逗号。其次,你可以直接使用字符拼接而不是使用字符串对象,这样会更高效。此外,你可以使用charAt()方法来获取字符串中的每个字符,然后与数字 x 进行比较,这样会更简洁一些。希望这些建议对你有所帮助!
海里遨游的 2023-09-24
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

int Intnum(int n, int x) {
    int count = 0;
    for (int i = 1; i <= n; i++) {
        int temp = i;
        while (temp > 0) {
            if (temp % 10 == x) {
                count++;
            }
            temp /= 10;
        }
    }
    return count;
}

int main() {
    int n, x;
    scanf("%d %d", &n, &x);

    int count = Intnum(n, x);
    printf("%d\n", count);

    return 0;
}
孤独一个人走 2023-10-20
  • 举报
回复
@海里遨游的 为什么只对10取余,你只考虑到了个位上的X个数,没有考虑到十位以及之后更高位数中X的个数,所以按照你这个思路,第一步判断N是几位数,再整除对应的100,10,这些,再对个位取余。
dddddandan 2023-10-20
  • 举报
回复
@孤独一个人走 temp /= 10
CSDN-Ada助手 2023-12-26
  • 举报
回复
@海里遨游的 您的代码已经很不错了,可以有效地计算出数字 x 在区间 1 到 n 中出现的次数。如果您有任何其他问题或者需要进一步的帮助,请随时告诉我。
jk_101 2023-09-20
  • 打赏
  • 举报
回复

n, x = map(int, input().split())
count = 0

for i in range(1, n + 1):
    count += str(i).count(str(x))

print(count)



2301_79429141 2023-10-31
  • 举报
回复
@jk_101 为什么我输入1 10,结果是0?
2301_78592774 2023-11-14
  • 举报
回复
@2301_79429141 因为在0到1之间有0个‘10’,所以输出0;要不您试试输入10 1.这代表询问在1到10之间有多少个1
2301_79429141 2023-11-17
  • 举报
回复
@2301_79429141 哦豁,蟹蟹~~
1条回复
z20_03 2023-09-16
  • 打赏
  • 举报
回复
def shuzi(n, x):
    daoan = 0
    f = str(x)
    for i in range(1, n+1):
        h = str(i)
        print(h)
        a = str(i)
        d = a[0]
        if i > 9:
            e = a[1]
            g = a[0]
            if e == f and g == f:
                daoan += 2
            elif g == f:
                daoan += 1
            elif e == f:
                daoan += 1
        elif i <= 9 and d == f:
            daoan += 1
    return daoan

c = str(shuzi(50, 2))
print(c)
CSDN-Ada助手 2023-12-26
  • 举报
回复
@z20_03 你的代码实现了计算在区间1到n中数字x出现的次数的功能,但代码中有些地方可以简化和优化。比如可以直接将整数转换为字符串来进行操作,避免重复的类型转换。另外,在判断数字x出现的时候,可以使用取余和整除来判断数字的个位和十位,这样可以简化逻辑。希望你可以尝试优化一下这部分代码。
嘿哈小将 2023-09-12
  • 打赏
  • 举报
回复 1
def count_digit_occurrences(n, x):
    count = 0
    for i in range(1, n + 1):
        count += str(i).count(str(x))
    return count
CSDN-Ada助手 2023-12-26
  • 举报
回复
@嘿哈小将 您的 count_digit_occurrences 函数看起来很不错,能够有效地计算数字 x 在区间 1 到 n 中出现的次数。感谢您分享这个解决方案!
PPPPickup 2023-09-10
  • 打赏
  • 举报
回复 1

int main()
{
    int i = 0;
    int j = 0;
    int n = 0;
    int x = 0;
    scanf("%d%d", &n, &x);
    for (i = 0; i <= n; i++)
    {
        if (i % 10 == x )
        {
            j++;
        }
         if (i / 10 == x)
        {
            j++;
        }
    }
    printf("%d\n", j);
    return 0;
}
CSDN-Ada助手 2023-12-26
  • 举报
回复
@PPPPickup 你的程序思路基本正确,但是在判断数字 x 是否出现时,可以简化一下。可以直接对每个数字进行取余操作,判断是否等于 x,然后累加即可。不需要再进行除法运算。这样可以简化代码并提高效率。
加载更多回复(58)

11,808

社区成员

发帖
与我相关
我的任务
社区描述
Study well and make progress every day
其他 企业社区
社区管理员
  • 每日一练社区
  • CSDN学习
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧