我觉得这道题目用到的思想就是,一个atoi转换函数,还有就是解决问题的递归思想,解决了前一个问题,后面的就可以递归调用这种解决方法.
还有就是模拟解决方法的能力,以后的题目,你不可能一看就知道怎么做的,也不可能确定自己的方法就是最简单的方法,但是你可以用笨笨的方法解决,
这也是一种能力,就是实现自己思想,将自己的思想转换成代码的能力!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int sta = '0';
bool cmp1 (char a, char b)
{
return a > b;
}
bool cmp2 (char a, char b)
{
return a < b;
}
void Solve (char *str, int cnt)
{
int flag = atoi (str);
char pat1[11];
char pat2[11];
int i;
for (i = 0; i < 4; i++)
{
pat1[i] = pat2[i] = str[i];
}
pat1[i] = pat2[i] = '\0';
sort (pat1, pat1 + 4, cmp1);
sort (pat2, pat2 + 4, cmp2);
int temp = atoi (pat1) - atoi (pat2);
if (temp == flag)
{
cnt ++;
cout << cnt << endl;
return;
}
else
{
str[0] = temp / 1000 + sta;
str[1] = temp % 1000 / 100 + sta;
str[2] = temp % 1000 % 100 / 10 + sta;
str[3] = temp % 1000 % 100 % 10 + sta;
str[4] = '\0';
Solve (str, cnt + 1);
}
}
int main ()
{
char str[11];
int N;
cin >> N;
while (N--)
{
cin >> str;
Solve (str, 0);
}
return 0;
}