【題解】LightOJ1163 Bank Robbery 列舉+數學知識
Description
In one very cold morning, Mark decides to rob a bank. But while trying hacking into the security system, he found that it is locked by some random value. He also found a pattern on the random number, that is if he chops off the last digit of a number A, he gets a new number B. Then he calculates (A-B). He checked the first few numbers of the security system which exactly equals (A-B). Being very excited to have found the pattern, he learns that there are like 500 levels on the security system. He calculated all those numbers by hand but took a lot of time. As a sign of his accomplishment he left a note on the vault stating the pattern. You were the first officer on the crime scene and you’ve obtained the note. So if you can figure out A from (A-B), you can rob the bank very quick!
By the way, Mark succeeded in robbing the bank but had a heart attack on the getaway car and crashed.
Input
Input starts with an integer T (≤ 500), denoting the number of test cases.
Each line contains a single positive integer between 10 and 1018 (inclusive), giving the value of A-B.
Output
For each case, print the case number and the possible values of A in ascending order. Separate consecutive numbers with a single space.
Sample Input
4
31
18
12
17
Sample Output
Case 1: 34
Case 2: 19 20
Case 3: 13
Case 4: 18
寫出方程,列舉求出解
#include<cstdio>
typedef unsigned long long ull;
int t,ca;
ull a,b;
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%llu ",&b);
printf("Case %d:",++ca);
for(int i=9;i>=0;i--)
if((10*b-i)%9==0)printf(" %llu",(10*b-i)/9);
puts("");
}
return 0;
}