#defineDST_NUM6174
void ReSort(char c[], int len)
int MaxNum(char c[], int len)
int MinNum(char c[], int len)
void GetChars(unsigned int num, char c[], int len)
int count = 0
int func(unsigned int num)
{
int res
char c[4]
GetChars(num, c, 4)
ReSort(c, 4)
res = MaxNum(c, 4) - MinNum(c, 4)
count++
if(res == DST_NUM) return count
return func(res)
}
void main()
{
unsigned int num
while(scanf("%d", &num))
{
getchar()
printf("%d\n", func(num))
count = 0
}
}
void GetChars(unsigned int num, char c[], int len)
{
for(int i = 0i <leni++)
{
c[i] = num % 10 + '0'
num = num / 10
}
}
void ReSort(char c[], int len)
{
int i, j
char tmp
for(i = len - 1i >0i--)
{
for(j = 0j <ij++)
{
if(c[j] >c[j+1])
{
tmp = c[j]
c[j] = c[j+1]
c[j+1] = tmp
}
}
}
}
int MaxNum(char c[], int len)
{
unsigned int num = 0
for(int i = len - 1i >= 0i--)
{
num *= 10
num += (c[i] - '0')
}
return num
}
int MinNum(char c[], int len)
{
unsigned int num = 0
for(int i = 0i <leni++)
{
num *= 10
num += (c[i] - '0')
}
return num
}
更快一点的方法:先把字符串全部反转 network 变成 krowten
然后把前面4位和后面3位分别反转 workten worknet
要交换的次数为 2n 次
下面是完整的测试程序:
#include <stdio.h>
//反转一个字符串
void reverse(char * begin , char * end)
{
char tmp
while(begin <end)
{
tmp = *begin
*(begin++) = *end
*(end--) = tmp
}
}
//字符串左位移
void shift(char * str , int mov)
{
int size = strlen(str)
reverse(str , str + size - 1)
reverse(str , str + mov - 1)
reverse(str + mov , str + size - 1)
}
int main()
{
char test[] = "helloworld"
shift(test , 5)
printf("%s",test)
return 0
}