USACO chapter 1 section 1.3 Prime Cryptarithm

USACO chapter 1 section 1.3 Prime Cryptarithm

USER: tianbing tianbing [tbbd4261]
TASK: crypt1
LANG: C++
Compiling...
Compile: OK
Executing...
Test 1: TEST OK [0.011 secs, 2928 KB]
Test 2: TEST OK [0.011 secs, 2928 KB]
Test 3: TEST OK [0.022 secs, 2928 KB]
Test 4: TEST OK [0.000 secs, 2928 KB]
Test 5: TEST OK [0.000 secs, 2928 KB]
Test 6: TEST OK [0.011 secs, 2928 KB]
Test 7: TEST OK [0.011 secs, 2928 KB]
All tests OK.

YOUR PROGRAM ('crypt1') WORKED FIRST TIME! That's fantastic -- and a rare thing. Please accept these special automated congratulations.

Here are the test data inputs:

------- test 1 -------
5
2 3 4 6 8
------- test 2 -------
4
2 3 5 7
------- test 3 -------
1
1
------- test 4 -------
7
4 1 2 5 6 7 3
------- test 5 -------
8
9 1 7 3 5 4 6 8
------- test 6 -------
6
1 2 3 5 7 9
------- test 7 -------
9
1 2 3 4 5 6 7 8 9
Keep up the good work!
 Thanks for your submission! 
 

简单就好,没考虑效率;
题目限制:三位数乘以两位数,三位数乘以两位数的个位是个三位数(part1),同样三位数乘以两位数的十位也是一个三位数(part2)。
结果是个四位数,并且所有的数字都在题目给的范围中;
笨的方法:
three数组存所有可能的三位数,two存所有可能的两位数,判断part1 part2 以及最后的结果result即可

 1 /**/ /*
 2ID:tbbd4261
 3PROG:crypt1
 4LANG:C++
 5*/

 6
 7 #include < fstream >
 8 #include < vector >
 9 using   namespace  std;
10 int  a[ 10 ] = {0} ;
11
12 bool  valid( int  x, int  n)    // 判断数字是否合法 
13 {
14     for(int i=1; i<=n; i++)
15      if(a[i]==x)return true;
16     return false;
17}

18
19 bool  ispri( int  x, int  n) // 判断数是否由给定数字组成 
20 {
21     while(x)
22     {
23        int i=x%10;
24        if(!valid(i,n))return false;
25        x=x/10;
26     }

27     return true;
28}

29
30 int  main()
31 {
32    ifstream fin("crypt1.in");
33    ofstream fout("crypt1.out");
34    int n,k,i,j,cnt=0;
35    int result;
36    vector<int> three;
37    vector<int> two;
38    fin>>n;
39    for(i=1; i<=n; i++)
40        fin>>a[i];
41    for(i=1; i<=n; i++)
42    for(j=1; j<=n; j++)
43    {
44         two.push_back(a[i]*10+a[j]);
45         for(k=1; k<=n; k++)
46          three.push_back(a[i]*100+a[j]*10+a[k]);
47    }

48    
49    for(i=0; i<three.size(); i++)
50    for(j=0; j<two.size(); j++)
51    {
52     int part1=three[i]*(two[j]%10);
53     int part2=three[i]*(two[j]/10);
54     result=three[i]*two[j];
55     if(result>=1000&&result<10000&&ispri(result,n)
56     &&part1>=100&&part1<=999&&part2>=100&&part2<=999&&ispri(part1,n)&&ispri(part2,n))
57        cnt++;
58    }

59    fout<<cnt<<endl;
60    
61    return 0;
62}

你可能感兴趣的:(USACO chapter 1 section 1.3 Prime Cryptarithm)