首页 > 试题广场 >

[NOIP2013]记数问题

[编程题][NOIP2013]记数问题
  • 热度指数:12698 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
试计算在区间1 n 的所有整数中,数字x0 ≤ x ≤ 9)共出现了多少次?
例如,在111 中,即在1234567891011 中,数字1 出现了4 次。

输入描述:
输入共1行,包含2个整数n、x,之间用一个空格隔开。


输出描述:
输出共1行,包含一个整数,表示x出现的次数。
示例1

输入

11 1

输出

4

备注:
对于100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
package main

import (
    "fmt"
)

func main() {
    var n, x int
    fmt.Scan(&n, &x)
    var ans = 0
    for i := 1; i <= n; i++ {
        t := i
        for t > 0 {
            if t%10 == x {
                ans++
            }
            t /= 10
        }
    }
    fmt.Println(ans)
}
发表于 2023-12-24 02:33:11 回复(0)
package main

import (
	"fmt"
	"strconv"
	"strings"
)

func findsum(a, sum int) (times int) {
	var str_a []string
	var counts int
	str_sum := strconv.Itoa(sum)
	for i := 1; i <= a; i++ {
		str_i := strconv.Itoa(i)
		str_a = append(str_a, str_i)
	}
	for k := 0; k < len(str_a); k++ {
		string_list := fmt.Sprintf("%s", str_a[k])
		if strings.Index(string_list, str_sum) != -1 {
			count := strings.Count(string_list, str_sum)
			counts += count
		}
		continue
	}
	return counts
}

func main() {
	var a, b int
	fmt.Scan(&a, &b)
	times := findsum(a, b)
	fmt.Println(times)
}

发表于 2022-05-20 11:03:02 回复(0)
package main

import (
    "fmt"
    "strconv"
    "strings"
)

func findsum(a, sum int) (times int) {
    var str_a []string
    var counts int
    str_sum := strconv.Itoa(sum)
    for i := 1; i <= a; i++ {
        str_i := strconv.Itoa(i)
        str_a = append(str_a, str_i)
    }
    for k := 0; k < len(str_a); k++ {
        string_list := fmt.Sprintf("%s", str_a[k])
        if strings.Index(string_list, str_sum) != -1 {
            count := strings.Count(string_list, str_sum)
            counts += count
        }
        continue
    }
    return counts
}

func main() {
    var a, b int
    fmt.Scan(&a, &b)
    times := findsum(a, b)
    fmt.Println(times)
}

发表于 2022-03-04 15:58:01 回复(0)