首页 > 解决方案 > 我想找到一个给定模式的整数

问题描述

我想制作一个程序来计算给定范围内的数字,其中有给定的模式,只使用“for”函数、“if~else if”函数、“while”函数和函数调用。像这样(10、300、11)从用户那里获取起始编号、结束编号和模式编号。并且程序将计算有多少整数像 11,110,111,112,113,114,115,116,117,118,119,211 中有 11 个模式。

每个数字的范围是 (1<=pattern, start, end number<=9999)

我试图用一位数、两位数、三位数和四位数的模式分类来解决这个问题。(1<=模式号<=9、10<=模式号<=99这样的。)但我不'不知道如何将每个模式数字与范围数字匹配。以下是我的代码,请帮助我... #include <stdio.h> int main() {

int nums, numf, nump;
int i=0;
int a=0, b=0, c=0, d=0; 
int count=0;
printf("Start: ");
scanf("%d", &nums);
printf("End: ");
scanf("%d", &numf);
printf("Pattern: ");
scanf("%d", &nump);
if(1<=nump<10){
    for(i=nums; i<=numf; i++){
        a=i/1000;
        b=i/100%10;
        c=i/10%10;
        d=i%10;
        if(nump==d || nump==c || nump==b || nump==a ){
            count++;
        }
    }
    printf("Result: %d", count);
}
else if(10<=nump<99){
    for(i=nums; i<=numf; i++){
        if(1<=i<10){
            continue;
        }
        else if(10<=i<99){
            if(i==nump){
                count++;
            }
            else{
                continue;
            }
        }
        else if (100<=i<999){
            a=i/10;
            b=i%100;
            if(nump==a || nump==b){
                count++;
            }
        }
        else{
            a=i/100;
            b=i/10%100;
            c=i%100;
            if(nump==c || nump==b || nump==a ){
                count++;
            }
        }   
    }
    printf("Result: %d", count);
}
else if(100<=nump<999){
    for(i=nums; i<=numf; i++){
        if(i/10==0){
            continue;
        }
        else if(10<=i<99){
            continue;
        }
        else if (100<=i<999){
            if(i==nump){
                count++;
            }
        }
        else{
            a=i/10;
            b=i%1000;
            if( nump==b || nump==a ) {
                count++;
            }
        }
    }
    printf("Result: %d", count);
}
else{
    for(i=nums; i<=numf; i++){
        if(nump==i){
            count++;
        }
    }
    printf("Result: %d", count);
}
return 0;

}

标签: c

解决方案


就像是 :

start = 10
end = 300
pattern = 11
# find number of digits for pattern
tenFactor = 10
while pattern > tenFactor:
    tenFactor *= 10

found = []
# no number before pattern csn match pattern
num = max(start, pattern)
while num <= end:
    subnum = num
    # fin if last n digits of number == pattern
    # do this from num and by dividing num by 10 each tine
    while subnum >= pattern:
        if subnum % tenFactor == pattern:
            #print(num)
            found.append(num)
        subnum /= 10
    num += 1
print( found)

输出 :

[11, 110, 111, 111, 112, 113, 114, 115, 116, 117, 118, 119, 211]

推荐阅读