跳至正文

NOIP 1998 普及组 巧妙填数 解题报告

  很简单的一个题目,没一次AC,因为忘记判断0了,有可能出现十位或个位上有零的情况,代码:
#include <stdio.h>
#include <string.h>
int sum;
int used[10];
int ck[10];

int check(int n)
{
        int t;
        while(n){
                t = n % 10;
                if(ck[t] || (t == 0)){
                        //要考虑不能为0的情况 
                        return 0;
                }
                ck[t] = 1;
                n /= 10;
        }
        return 1;
}

void srch(int now)
{
        int i;
        if(now == 3){
                memset(ck, 0sizeof(ck));
                if(check(sum) && check(2  sum) && check(3  sum)){
                        printf("%d %d %d\n", sum, 2  sum, 3  sum);
                }
                return;
        }
        sum = ((sum << 3) + (sum << 1));
        //sum *= 10;
        for(i = 1; i <= 9; i++){
                sum += i;
                srch(now + 1);
                sum -= i;
        }
        sum /= 10;
}

int main(void)
{
        srch(0);
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注