跳至正文

NOIP 2008 火柴棒等式 解题报告

  刚刚拿到题目感觉非常容易,第一次提交,发现把数据写错了,6是6根火柴,我写的5根。第二次提交我发现题目不止是个位的运算,还可以十位,百位。。第三次提交,AC了,不过效率太慢了,代码如下:
#include <stdio.h>
int num[10] = {6255456376};
                    //数据写错了

int count(int n)
{
        int t = 0;
        if(n == 0){
                t = num[0];
        }
        while(n){
                t += num[n % 10];
                n /= 10;
        }
        return t;
}

int main(void)
{
        int n;
        int i, j;
        int ans = 0;
        scanf("%d", &n);
        for(i = 0; i <= 2000; i++){
                for(j = 0; j <= 2000; j++){                           
                        if(count(i) + count(j) + count(i + j) + 4 == n){
                                ans++;
                        }
                }
        }
        printf("%d\n", ans);
        return 0;
}
  后来看到七妹的代码,发现自己的代码太破了,本来我是想用数组记录一下的,后来发现这都不用。NOIP 2008 火柴棒等式 解题报告 - NeWorldMaker - My S-K-Y,修改后的代码如下:
#include <stdio.h>
int num[5001] = {6255456376};
                    //数据写错了
int main(void)
{
        int n;
        int i, j;
        int ans = 0;
        scanf("%d", &n);
        for(i = 10; i <= 5000; i++){
                num[i] = num[i / 10] + num[i % 10];
        }
        for(i = 0; i <= 5000; i++){
                for(j = 0; j <= 5000; j++){
                        if(i + j <= 5000 && num[i] + num[j] + num[i + j] + 4 == n){
                                ans++;
                        }
                }
        }
        printf("%d\n", ans);
        return 0;
}

发表回复

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