Отримання знань

дистанційна підтримка освіти школярів


Numbers That Count
http://acm.pku.edu.cn/JudgeOnline/problem?id=1016

   Входные данные

   Выходные данные

   Пример входных данных

   Пример выходных данных

   Анализ условия и обсуждение идеи решения

   Пример решения на С++:

#include < stdio.h >
#include < string.h >

#define MAXL 200

char stack[MAXL][MAXL];
int top;
char t1[MAXL],t2[MAXL];
int count[10];
int flag;

void push(char *s,int &t)
{
strcpy(stack[t],s);
t++;
}

int main()
{
int i,j,k,l,o;
char tmp[MAXL];
scanf("%s",t1);
while (strcmp(t1,"-1") != 0)
{
top = 0; flag = -1;
while (top < 15)
{
push(t1,top);
memset(count,0,sizeof(count));
o = strlen(t1);
for (i = 0; i < o; i++)
count[t1[i]-'0']++;
l = 0;
for (i = 0; i < 10; i++)
if (count[i])
{
k = 0;
do
{
tmp[k++] = count[i] % 10 + '0';
count[i] /= 10;
} while (count[i]);
for (j = k - 1; j >= 0; j--)
t2[l++] = tmp[j];
t2[l++] = i + '0';
}
t2[l] = '\0';
if (strcmp(t1,t2) == 0)
{
flag = 0; break;
}
for (i = top - 2; i >= 0; i--)
if (strcmp(t2,stack[i]) == 0)
{
flag = 1;k = i; break;
}
strcpy(t1,t2);
}
if (flag == -1)
printf("%s can not be classified after 15 iterations\n",stack[0]);
else if (flag == 1)
printf("%s enters an inventory loop of length %d\n",stack[0],top - k);
else if (top == 1)
printf("%s is self-inventorying\n",stack[0]);
else printf("%s is self-inventorying after %d steps\n",stack[0],top-1);
scanf("%s",t1);
}
return 0;
}

 

Попередня Зміст Наступна
В системі: гості - (1); користувачі - (0)