题解

210 条题解

  • -1
    @ 2019-11-27 01:05:11

    #include<iostream>//有点小题大作了,没往暴力的角度想。但谁能保证以后不会有更大的数据
    #include<cstring>//去卡这个O(n)的暴力呢?
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    //abcdefg
    int main()
    {//wa点:注意0和其他的数字不一样,不允许除0以外的数有前导零,但我们不能输出0,范围
    int a, b;
    cin>>a>>b;
    int sum = 0;
    int p = 1;//设当前被切割的位置是i,i前面的十进制数记为A,后面的记为B。没有位就是0
    while(a / p > 0){
    if((a / p) % 10 > b){
    sum += (a / (10 * p) + 1) * p;//(A+1)*整个空间 ,从0~99··9,这里9就是B的位数
    }
    else if((a / p) % 10 == b){
    sum += (a / (10 * p)) * p + (a % p + 1);//前面的项取到最大值时,后面只能取0~B
    }
    else{
    sum += (a / (10 * p)) * p;
    }
    if(b == 0)
    sum -= p;
    p *= 10;
    }
    cout<<sum<<endl;
    return 0;
    }
    //21 1 13=> 1、11、21、 10、11、12、13、14、15、16、17、18、19共13次
    //221 1 => 1、11、21··221 23个
    // => 10、11··19;110、111···119;210、211···219 30个
    // => 100~199 100个 共153次
    //221 3 => 3、13、23··213 22个
    // => 30、31··39;130、131···139 20个
    // => 0个 共42次
    //WA点 221 0 => 0、10、20···220 23个
    // =>100、101··109;200、201···209 20个

  • -1
    @ 2019-11-12 17:22:41

    #include<iostream>
    using namespace std;
    int main()
    {
    int n,i,x,a,sum=0;
    cin>>n>>x;
    for(i=1;i<=n;i++)
    {
    a=i;
    while(a>0)
    {
    if(a%10==x)
    {
    sum++;
    }
    a=a/10;
    }
    }
    cout<<sum;
    }

  • -1
    @ 2019-11-07 19:23:07
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int a,b,ans=0;
        cin>>a>>b;
        for(int n=1;n<=a;n++)
        {
            int fornow=n;
            while(fornow>0)
            {
                if(fornow%10==b)ans++;
                fornow/=10;
            }
        }
        cout<<ans;
        return 0;
    }
    
  • -1
    @ 2019-08-15 21:42:58

    #include<bits/stdc++.h>//头文件

    **#include<bits/stdc++.h>//头文件
    using namespace std;//标准命名空间
    int main(){//程序入口
    int n,cnt=0,x;
    cin>>n>>x;
    for(int i=1;i<=n;i++){
    int temp=i;
    while(temp>0){
    if(temp%10==x) cnt++;
    temp/=10;
    }
    }
    cout<<cnt;
    return 0;//返回0,程序结束
    }
    **
    就是这么简单

  • -1
    @ 2019-06-29 19:39:01

    var
    res,m,n,j,i:longint;
    s,t:string;
    begin
    readln(n,m);
    str(m,t);
    for i:=1 to n do
    begin
    str(i,s);
    for j:=1 to length(s) do
    if s[j]=t then inc(res);
    end;
    writeln(res);
    end.

    字符串查找解决,避免了运算费时等问题,最长用时不过52毫秒。

    #1 Accepted 1ms 128.0 KiB
    #2 Accepted 0ms 128.0 KiB
    #3 Accepted 40ms 128.0 KiB
    #4 Accepted 1ms 128.0 KiB
    #5 Accepted 52ms 128.0 KiB
    #6 Accepted 30ms 128.0 KiB
    #7 Accepted 0ms 128.0 KiB
    #8 Accepted 28ms 128.0 KiB
    #9 Accepted 50ms 128.0 KiB
    #10 Accepted 51ms 128.0 KiB

  • -1
    @ 2019-05-26 17:15:59
    #include<iostream>
    using namespace std;
    int x,ans,n;
    int main()
    {
        cin >> x >> n;
        for(int i=1;i<=x;++i)
        {
          int q=i;
          while(q>0)
          {
            if(q%10==n)++ans;
            q/=10;
          }
        }
        cout << ans << endl;
        return 0;
    }
    
  • -1
    @ 2019-04-25 13:17:41

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    int n,x,k=0;
    cin>>n>>x;
    for(int i=1;i<=n;i++){
    int j=i;
    while(j){
    if(j%10==x)k++;
    j/=10;
    }
    }
    cout<<k;
    return 0;
    }

  • -1
    @ 2019-04-20 07:45:11

    1ms Accepted

    #include <cmath>
    #include <iostream>
    #include <stdio.h>

    using namespace std;

    int main()
    {
    int n, nn, x, digit;
    cin >> n;
    cin >> x;
    nn = n;
    if (n < 10) {
    if (x != 0) {
    cout << (n >= x ? 1 : 0);
    } else {
    cout << 0;
    }
    return 0;
    }

    digit = (int)log10(n);

    int* regist = new int[digit];
    regist[0] = 1; // once in 10
    for (int i = 1; i < digit; i++) {
    // first digit + 10 * rest digits
    regist[i] = pow(10, i) + 10 * regist[i - 1];
    }

    int* nums = new int[digit + 1]; // each digits
    int* residue = new int[digit + 1];
    for (int i = digit; i >= 0; i--) {
    nums[digit - i] = nn / (pow(10, i));
    nn -= nums[digit - i] * (pow(10, i));
    residue[digit - i] = nn;
    }

    int result = 0;
    if (x != 0) {
    for (int i = 0; i < digit; i++) {
    result += nums[i] * regist[digit - i - 1];
    if (nums[i] == x) {
    result += (residue[i] + 1);
    } else if (nums[i] > x) {
    result += pow(10, digit - i);
    }
    }
    if (residue[digit - 1] >= x) {
    result += 1;
    }
    } else {
    // sum numbers of zeros at each digit
    for (int i = 1; i < digit + 1; i++) {
    if (nums[i] > 0) {
    result += (pow(10, digit - i) * (n / (int)pow(10, digit - i + 1)));
    } else {
    result += (pow(10, digit - i) * (n / (int)pow(10, digit - i + 1) - 1));
    result += (residue[i] + 1);
    }
    }
    }
    cout << result;

    delete[] regist;
    delete[] nums;
    delete[] residue;
    return 0;
    }

  • -1
    @ 2018-12-24 22:48:53
    n,x = input().split()
    n = int(n)
    alist=[]
    for i in range(1,n+1):
        alist.append(str(i))
    alist=''.join(alist)
    result = alist.count(x)
    print(result)
    
  • -1
    @ 2018-12-03 15:57:07

    #include<iostream>
    #include<string>
    #include<math.h>
    #include<string.h>
    using namespace std;
    int cnt=0;
    int n;
    int x;
    int main(){
    cin>>n;
    cin>>x;
    for(int i=1;i<=n;i++){
    int t=i;
    while(t>0){
    if(t%10==x){
    cnt++;
    }
    t/=10;
    }
    }
    cout<<cnt;
    return 0;
    }

  • -1
    @ 2018-11-24 16:20:18

    #include <bits/stdc++.h>
    using namespace std;
    int a,x,sum;
    int j,i;
    int main()
    {
    cin>>a>>x;
    for(i=1;i<=a;i++)
    {
    j=i;
    while(j>0){
    if(j%10==x)
    sum++;//分离位数
    j=j/10;//更新
    }
    }
    cout<<sum<<endl;
    return 0;
    }
    本蒟蒻本来想用函数做,但想想还是算了
    懒得去打,直接写个最简单的

  • -1
    @ 2018-11-17 19:06:55

    c++代码
    #include<bits/stdc++.h>
    using namespace std;
    int n,x,ans;
    void js(int n){
    while(n){
    if(n%10==x) ans++;
    n/=10;
    }
    }
    int main(){
    scanf("%d%d",&n,&x);
    for(int i=1;i<=n;i++) js(i);
    printf("%d",ans);
    return 0;
    }

  • -1
    @ 2018-11-07 17:30:34

    Go语言的来啦~

    package main

    import "fmt"

    var (
    n int
    x int
    j int=0
    )

    func main() {

    fmt.Scanln(&n, &x)

    for t:=1; t < n+1; t++ {
    i := t
    for {
    if i < 10 {
    if i == x {
    j++
    break
    } else {
    break
    }
    }else {
    if i%10 == x {
    j++
    i = i/10
    } else {
    i = i/10
    }
    }
    }
    }
    fmt.Println(j)
    }

  • -1
    @ 2018-10-06 09:01:50

    啦啦啦,我来水题了
    #include <stdio.h>
    long search(long n,long x)
    {

    long total=0;
    for (long i=1;i<=n;i++)
    {
    long j=i;
    while (j!=0)
    {
    int k=j%10;
    if (k==x)
    {
    total=total+1;
    }
    j=j/10;
    }
    }
    return total;
    }

    int main()
    {
    long n,x;
    scanf("%ld %ld",&n,&x);
    printf("%ld\n",search(n,x));
    }

  • -1
    @ 2018-09-23 18:01:45

    枚举+模运算
    由于n最大是1000000所以不会超时
    不知道有没有更快的做法

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    int main()
    {
        int sum=0;
        int n;
        int p;
        int tmp;
        cin>>n>>p;
        for(int i=1;i<=n;i++)
        {
            tmp=i;
            while(tmp>0)
            {
                if(tmp%10==p)
                    sum++;
                tmp/=10;
            }
        }
        cout<<sum<<endl;
        return 0;
    }
    
  • -1
    @ 2018-09-05 08:42:13

    #include <iostream>
    using namespace std;
    int main()
    {
    int n,x,i,t,ans=0;
    cin>>n>>x;
    for(i=1;i<=n;i++){
    t=i;
    while(t>0){
    if(t%10==x){
    ans++;
    }
    t/=10;
    }
    }
    cout<<ans;
    return 0;
    }

  • -1
    @ 2018-09-04 20:46:06

    #include <iostream>
    using namespace std;
    int main()
    {
    int a,b,sum=0;*//sum为出现次数*
    cin>>a>>b;
    for(int i=1;i<=a;i++)
    {int c=i;
    while(c>0){if(c%10==b)sum=sum+1;c=c/10;}*//分析每一个数位上的数*

    }
    cout<<sum;*//输出*
    return 0;
    }

  • -1
    @ 2018-09-03 18:40:56

    #include<iostream>
    using namespace std;
    int main(){
    int n,m,x,y,ans;
    cin>>n>>x;
    ans=0;
    for(int i=1;i<=n;i++){
    y=i;
    do{
    m=y%10;
    if(m==x) ans++;
    y=y/10;
    }
    while(y!=0);
    }
    cout<<ans;
    return 0;
    }

  • -1
    @ 2018-08-15 21:32:48
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        int maxNum;
        int correntNum;
        int counter = 0;
        int findNum;
        int num;
        int temp;
        scanf("%d%d",&maxNum,&findNum);
        for(correntNum = 1; correntNum <= maxNum; correntNum++)
        {
            temp = correntNum;
            do
            {
                num = temp % 10;
                temp = temp / 10;
                if(num == findNum)
                    counter++;
            }while(temp > 0);
        }
        printf("%d",counter);
        return 0;
    }
    
    
  • -1
    @ 2018-08-08 19:02:01

    国服影流之主来了!!!
    var
    n,t,l,k,num,i:longint;
    s,num1:string;
    begin
    read(n,num);
    str(num,num1);
    for i:=1 to n do
    begin
    str(i,s);
    k:=length(s);
    l:=0;
    while l<k do
    begin
    inc(l);
    if s[l]=num1 then inc(t);
    end;
    end;
    write(t);
    end.

信息

ID
1848
难度
5
分类
(无)
标签
递交数
16396
已通过
5730
通过率
35%
被复制
33
上传者