Kia's Calculation hdu4726

Kia's Calculation

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1367    Accepted Submission(s): 327


Problem Description
Doctor Ghee is teaching Kia how to calculate the sum of two integers. But Kia is so careless and alway forget to carry a number when the sum of two digits exceeds 9. For example, when she calculates 4567+5789, she will get 9246, and for 1234+9876, she will get 0. Ghee is angry about this, and makes a hard problem for her to solve:
Now Kia has two integers A and B, she can shuffle the digits in each number as she like, but leading zeros are not allowed. That is to say, for A = 11024, she can rearrange the number as 10124, or 41102, or many other, but 02411 is not allowed.
After she shuffles A and B, she will add them together, in her own way. And what will be the maximum possible sum of A "+" B ?
 
Input
The rst line has a number T (T <= 25) , indicating the number of test cases.
For each test case there are two lines. First line has the number A, and the second line has the number B.
Both A and B will have same number of digits, which is no larger than 106, and without leading zeros.
 
Output
For test case X, output "Case #X: " first, then output the maximum possible sum without leading zeros.
 
Sample Input
1
5958
3036
 
Sample Output
Case #1: 8984
 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdio.h>
 4 #include <math.h>
 5 #include <algorithm>
 6 using namespace std;
 7 int a[10],b[10];
 8 int fun()
 9 {
10     int i,j,k;
11     for(k=9; k>=0; k--)
12     {
13         for(i=9; i>=1; i--)
14         {
15             for(j=9; j>=1; j--)
16             {
17                 if(a[i]&&b[j]&&(i+j)%10==k)
18                 {
19                     a[i]--,b[j]--;
20                     printf("%d",k);
21                     return k;
22                 }
23             }
24         }
25     }
26 }
27 int main()
28 {
29     int t,i,j,k,r;
30     char x;
31     scanf("%d",&t);
32     getchar();
33     for(r=1; r<=t; r++)
34     {
35         memset(a,0,sizeof(a));
36         memset(b,0,sizeof(b));
37         while(x=getchar())
38         {
39             if(x=='
')break;
40             a[x-'0']++;
41         }
42         while(x=getchar())
43         {
44             if(x=='
')break;
45             b[x-'0']++;
46         }
47         printf("Case #%d: ",r);
48         if(fun())
49             for(k=9; k>=0; k--)
50             {
51                 for(i=9; i>=0; i--)
52                 {
53                     for(j=9; j>=0; j--)
54                     {
55                         while(a[i]&&b[j]&&(i+j)%10==k)
56                         {
57                             a[i]--,b[j]--;
58                             printf("%d",k);
59                         }
60                     }
61                 }
62             }
63         puts("");
64     }
65 }
View Code
 
原文地址:https://www.cnblogs.com/ERKE/p/3638067.html