#10 TLE 最后一个测试点超时
查看原帖
#10 TLE 最后一个测试点超时
1476903
SXe16384楼主2024/12/10 16:59

如题,最后一个测试点超时了

1-9#测试点都是AC,而且如果不考虑限时问题,那么#10的输出也应该是对的

换句话说就是代码效率太低,速度太慢

使用的是纯C,求大佬给一些优化建议qaq

代码如下,含注释

#include <stdio.h>
#include <math.h>

int include(int x, int a);
//定义了一个函数,作用是计算数字x中数码a出现了几次,返回值就是出现次数

int main(){
    int m, n;
    int count[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//这个数组存储0到9每个数码的总出现次数,目前还全都是0
    scanf("%d %d", &m, &n);

    for(int i = m; i <= n; i ++){
        for(int j = 0; j <= 9; j ++){
            count[j] += include(i, j);
        }
    }//从m到n暴力挨个统计每个数码的出现次数,我估计这里有优化空间

    for(int i = 0; i <= 9; i ++){
        printf("%d ", count[i]);
    }//打印结果
    return 0;
}

//出现次数函数的代码如下,我估计这里是优化重点
int include(int x, int a){
    int digit = 0, r;   //digit指代数位,个位数,十位数...
    int count = 0;
    for(; x >= pow(10, digit); digit ++){
    }//计算输入的x的位数
    for(int i = 1; i <= digit; i ++){
        r = x % 10;
        if(r == a){
            count ++;
        }
            x -= r;
            x /= 10;
    }//这个循环可以把输入的数字分解成每一位的数码
    return count;
}
2024/12/10 16:59
加载中...