//============================================================================
// Name : 1016.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 81
#define N 16
#define TEN 10
char data[N][M];
int number[TEN];
void inventorying(char* org, char *result) {
memset(number, 0, sizeof(number));
int len = strlen(org);
for (int i = 0; i < len; i++) {
number[org[i] - '0']++;
}
int location = 0;
for (int i = 0; i < TEN; i++) {
if (number[i]) {
if (number[i] > 9) {
result[location++] = number[i] / 10 + '0';
}
result[location++] = number[i] % 10 + '0';
result[location++] = i + '0';
}
}
result[location] = '\0';
}
int getResult() {
for (int i = 1; i < N; i++) {
inventorying(data[i - 1], data[i]);
if (strcmp(data[i - 1], data[i]) == 0) {
return i - 1;
}
for (int k = i - 2; k >= 0; k--) {
if (strcmp(data[k], data[i]) == 0) {
return k - i;
}
}
}
return M;
}
int main() {
while (1) {
scanf("%s", data[0]);
if (strcmp(data[0], "-1") == 0) {
break;
}
int result = getResult();
if (result == M) {
printf("%s can not be classified after 15 iterations\n", data[0]);
} else if (result < 0) {
printf("%s enters an inventory loop of length %d\n", data[0],
-result);
} else if (result == 0) {
printf("%s is self-inventorying\n", data[0]);
} else {
printf("%s is self-inventorying after %d steps\n", data[0], result);
}
}
return 0;
}
poj1016
最新推荐文章于 2019-03-12 21:59:14 发布