1. 程式人生 > >洛谷 P1149 火柴棒等式(太suang絡吧)

洛谷 P1149 火柴棒等式(太suang絡吧)

題目描述

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

注意:

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

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

n根火柴棍必須全部用上

輸入輸出格式

輸入格式: 一個整數n(n<=24)。

輸出格式: 一個整數,能拼成的不同等式的數目。

輸入輸出樣例

輸入樣例#1: 複製 14 輸出樣例#1: 複製 2 輸入樣例#2: 複製 18 輸出樣例#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

洛谷新手村的題目鴨

兩種思路:

1、給你n根火柴棒,求有多少種等式。

2、給你不同等式,求用了多少根火柴棒。

個人認為第二種更好

可以暴力列舉,也可以遞迴

迭代的方法生成了2000左右的數字所需火柴棒數,然後再列舉C和A,得到B=C-A,看看三個數字的火柴數目是否等於n就可以了。

洛谷已經AC

#include<cstdio>
int main()
{
        int a[2001]={6};//第一個初始化為6 因為數字0用火柴棒擺出來要六根 
		int n;//一共給了多少火柴 
		int b[10]={6,2,5,5,4,5,6,3,7,6};//這個代表0~9分別需要多少根火柴 把它們存在一個數組裡面  
		int s=0;//s是一個整數,表示能拼成的不同等式的數目。等下會輸出的 
		int j;
        scanf("%d",&n);//輸入的n代表火柴的總根數 
        for(int i=1;i<=2000;i++)
		//迭代的方法生成了2000左右的數字所需火柴棒數 
        {
                j=i;//j代表列舉的每一個數 
                while(j>=1)//這個while迴圈 目的是求每個數所用的火柴棒
                {
                        a[i]=a[i]+b[j%10];
                        j=j/10;
                }
        }
        for(int i=0;i<=1000;i++)
        //把1-1000表示出來就行
        {
                for(j=0;j<=1000;j++)
                	if(a[i]+a[j]+a[i+j]+4==n)//if語句 判斷 總的式子 是否正好可以把火柴棒用完
					//別忘了+4 因為還有加號與等號 
						s++;//能拼成的不同等式的數目++ 
        }
        	printf("%d",s);
        return 0;
}