noip2008 火柴棒等式


P1149 火柴棒等式

    • 1.9K通過
    • 3.7K提交
  • 題目提供者該用戶不存在
  • 標簽搜索/枚舉模擬2008NOIp提高組
  • 難度普及-

提交該題 討論 題解 記錄

 

題目描述

給你n根火柴棍,你可以拼出多少個形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整數(若該數非零,則最高位不能是0)。用火柴棍拼數字0-9的拼法如圖所示:

注意:

  1. 加號與等號各自需要兩根火柴棍

  2. 如果A≠B,則A+B=C與B+A=C視為不同的等式(A、B、C>=0)

  3. n根火柴棍必須全部用上

輸入輸出格式

輸入格式:

 

輸入文件matches.in共一行,又一個整數n(n<=24)。

 

輸出格式:

 

輸出文件matches.out共一行,表示能拼成的不同等式的數目。

 

輸入輸出樣例

輸入樣例#1:
樣例輸入1:
14
樣例輸入2:
18
輸出樣例#1:
樣例輸出1:
2
樣例輸出2:
9

說明

【輸入輸出樣例1解釋】

2個等式為0+1=1和1+0=1。

【輸入輸出樣例2解釋】

9個等式為:

0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
分析:這道題不算很難,首先要用一個數組把0~9數字所需要的火柴棒個數表示出來,但是超過了9怎么表示呢?一個10進制自然數是由0~9這幾個數字組成的,那么我們不斷的mod10就可以得到每個位置上的數,然后根據數組里的數據計算即可.不過要注意的是,運算符號也要算上火柴棒的個數.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n,ans = 0;
int s[10] = {6,2,5,5,4,5,6,3,7,6};

int shuliang(int x)
{
    if (x == 0)
    return 6;
    int sum = 0;
    while (x > 0)
    {
        sum += s[x % 10];
        x /= 10;
    }
    return sum;
}

int main()
{
    scanf("%d",&n);
    for (int i = 0; i < 1000; i++)
    for (int j = 0; j < 1000; j++)
    {
        int a = shuliang(i) + shuliang(j);
        int b = shuliang(i + j);
        if (a + b + 4 == n)
        ans++;
    }
    printf("%d",ans);
    
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM