usaco Prime Cryptarithm 解题报告
2012-12-13 14:51
387 查看
题意:
下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。
注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.
写一个程序找出所有的牛式。
题解:
枚举符合题意的乘数a和b,然后产生product1,product2,和总的product,分别检查是否符合要求,符合就计数器加一
代码:
下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
* * * x * * ---------- * * * * * * ---------- * * * *
数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。
注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.
写一个程序找出所有的牛式。
题解:
枚举符合题意的乘数a和b,然后产生product1,product2,和总的product,分别检查是否符合要求,符合就计数器加一
代码:
/* ID: lishicao PROG: crypt1 LANG: C++ */ #include <iostream> #include <fstream> #include <cstring> using namespace std ; ifstream fin ( "crypt1.in" ) ; ofstream fout ( "crypt1.out" ) ; int N , Count = 0 ; int number[10] , num[5] ; void dfs( int ) ; bool check() ; int main() { fin >> N ; for( int i = 0 ; i < N ; i ++ ) fin >> number[i] ; dfs( 0 ) ; fout << Count << endl ; return 0 ; } void dfs( int depth ) { if( depth == 5 ) { if( check() ){ Count ++ ; } return ; } for( int i = 0 ; i < N ; i ++ ) { num[depth] = number[i] ; dfs( depth + 1 ) ; } } bool check() { int product1 , product2 , product , temp , flag = 0 ; product1 = num[4] * ( 100 * num[0] + 10 * num[1] + num[2] ) ; product2 = num[3] * ( 100 * num[0] + 10 * num[1] + num[2] ) ; product = product1 + product2 * 10 ; if( product1 >= 1000 || product1 < 100 ) return false ; if( product2 >= 1000 || product2 < 100 ) return false ; if( product >= 10000 || product < 1000 ) return false ; for( int i = 0 ; i < 3 ; i ++ ) { temp = product1 % 10 ; product1 /= 10 ; int flag = 0 ; for( int j = 0 ; j < N ; j ++ ) if( temp == number[j] ) flag = 1 ; if( flag == 0 ) return false ; temp = product2 % 10 ; product2 /= 10 ; flag = 0 ; for( int j = 0 ; j < N ; j ++ ) if( temp == number[j] ) flag = 1 ; if( flag == 0 ) return false ; } for( int i = 0 ; i < 4 ; i ++ ) { temp = product % 10 ; product /= 10 ; int flag = 0 ; for( int j = 0 ; j < N ; j ++ ) if( temp == number[j] ) flag = 1 ; if( flag == 0 ) return false ; } return true ; }
相关文章推荐
- USACO :Party Lamps解题报告
- USACO 2.4.2 穿越栅栏(原题) 解题报告
- USACO Section1.5 Prime Palindromes 解题报告
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
- USACO 2.3.3 Zero Sum 解题报告
- USACO Section 1.3 Mixing Milk 解题报告
- usaco垃圾陷阱解题报告
- USACO Network of Schools 解题报告
- BZOJ 1694 & 1742 [Usaco 2005 nov] 区间DP 解题报告
- USACO4.1.2Fence Rails栅栏的木料解题报告
- USACO 1.4 ariprog 解题报告
- USACO 3.1解题思路报告
- USACO 3.4解题报告
- USACO:Agri-Net解题报告
- USACO Section1.3 Ski Course Design 解题报告
- USACO Section1.5 Superprime Rib 解题报告
- USACO Section2.1 Ordered Fractions 解题报告
- USACO The Primes 解题报告
- bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形 解题报告
- USACO Big Barn 解题报告