Uva 10624

Problem B
Super Number
Input: Standard Input Output: Standard Output Time Limit: 3 Seconds

主要是还是效率问题,一般暴力就直接怎么想就怎么解决就行了,但这题死活都是TEL,用了long long超时,用了char型替换整型不超时,如此还是不懂  -_- Mark一下~~

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char digit[32];
int n, m;

bool digit_mod(int k){
    int sum = 0;
    for(int i=0; i<k; ++i){
        sum = (sum*10+digit[i])%k;
    }
    if(sum == 0) return true;
    return false;
}

bool Traverse(int cur){
    if(cur == m) return true;
    for(int i=0; i<=9; ++i){
        digit[cur] = i;
        if(cur<n-1 || digit_mod(cur+1)){
            if(Traverse(cur+1)) return true;
        }
    }
    return false;
}

int main(){
    int t, times = 0;
    cin>>t;
    while(t--){
        cin>>n>>m;
        memset(digit, 0, sizeof(digit));
        bool flag = false;
        for(int i=1; i<=9 && flag == false; ++i){
            digit[0] = i;
            flag = Traverse(1);
        }
        printf("Case %d: ", ++times);
        if(flag == false) printf("-1
");
        else{
            for(int i=0; i<m; ++i){
                printf("%c", digit[i]+'0');
            }
            printf("
");
        }
    }
    return 0;
}

                                                                               

原文地址:https://www.cnblogs.com/liaoguifa/p/3139205.html