1069. The Black Hole of Numbers (20)
时间限制100 ms
内存限制65536 kB
代码长度限制16000 B
判题程序Standard作者CHEN, Yue
For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 -- the "black hole" of 4-digit numbers. This number is named Kaprekar Constant.
For example, start from 6767, we'll get:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range (0, 10000).
Output Specification:
If all the 4 digits of N are the same, print in one line the equation "N - N = 0000". Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.
Sample Input 1:6767Sample Output 1:7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174Sample Input 2:2222Sample Output 2:2222 - 2222 = 0000输入一个数N;
如果这个数是XXXX X都一样那么输出XXXX - XXXX = 0000
否则这个数的各个位数 组成的最大的 减去 组成的最小的 =结果 按形式输出,如果此时结果为6174或者XXXX结束;(此处至少进行一次,测试数据中有:如果输入的是6174也是要执行这样的一次的)
下面一个ac的,还有一个超时的
评测结果
时间 | 结果 | 得分 | 题目 | 语言 | 用时(ms) | 内存(kB) | 用户 |
---|---|---|---|---|---|---|---|
8月14日 11:33 | 答案正确 | 20 | 1069 | C++ (g++ 4.7.2) | 1 | 308 | datrilla |
测试点
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 1 | 180 | 2/2 |
1 | 答案正确 | 1 | 308 | 10/10 |
2 | 答案正确 | 1 | 180 | 2/2 |
3 | 答案正确 | 1 | 300 | 2/2 |
4 | 答案正确 | 1 | 180 | 2/2 |
5 | 答案正确 | 1 | 308 | 1/1 |
6 | 答案正确 | 1 | 180 | 1/1 |
#include<iostream> #include<string> #include<iomanip> #include<algorithm> using namespace std; bool charcmp(const char&a, const char &b) { return a > b; } int main() { char N[5]; int most, less; cin >> most; do { sprintf(N, "%04d", most); sort(N,N+4,charcmp); sscanf(N, "%d", &most); reverse(N, N + 4); sscanf(N, "%d",&less); cout << setw(4) << setfill('0') << most << " - " << setw(4) << setfill('0') << less << " = "; most = most - less; cout << setw(4) << setfill('0') << most << endl; } while (0!=most&&most!=6174); system("pause"); return 0; }
评测结果
时间 | 结果 | 得分 | 题目 | 语言 | 用时(ms) | 内存(kB) | 用户 |
---|---|---|---|---|---|---|---|
8月14日 11:17 | 部分正确 | 14 | 1069 | C++ (g++ 4.7.2) | 1 | 384 | datrilla |
测试点
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 1 | 180 | 2/2 |
1 | 答案正确 | 1 | 308 | 10/10 |
2 | 运行超时 | 0/2 | ||
3 | 运行超时 | 0/2 | ||
4 | 运行超时 | 0/2 | ||
5 | 答案正确 | 1 | 384 | 1/1 |
6 | 答案正确 | 1 | 180 | 1/1 |
#include<iostream> #include<string> #include<algorithm> using namespace std; bool charcmp(const char&a, const char &b) { return a > b; } bool ThesameOrcontinnue(char*N) { if (N[0] == N[1] && N[0] == N[2] && N[0] == N[3] ) { cout << N << " - " << N << " = 0000" << endl; return false; } else { sort(N, N + 4, charcmp); cout << N<<" - "; int c = 0,index=4; string tempN; tempN = N; while (index--) { cout << tempN[index]; c = tempN[index]-tempN[3-index] - c; if (c >= 0) { N[index] = c + '0'; c = 0; } else { N[index] = c + 10 + '0'; c = 1; } } cout << " = " << N << endl; } if (N[0] == '6'&& N[1] == '1' && N[2] == '7' && '4' == N[3]) return false; return true; } int main() { char N[5]; bool Flag=true; cin >> N; while (Flag) { Flag = ThesameOrcontinnue(N); } system("pause"); return 0; }