001 : #include <stdio.h>
002 : #include <stdlib.h>
003 : #include <string.h>
004 : 
005 : #define MAX_ELEMENTS 21
006 : #define MAX_LENGTH 6
007 : 
008 : int main(int argumentCount, char * argumentValues[]);
009 : int input(int * firstPointer, int * secondPointer);
010 : void perform(int aValue, int numberOfDigit);
011 : int getMaxNumber(int aValue, int numberOfDigit);
012 : int getMinNumber(int aValue, int numberOfDigit);
013 : void stringFromValueWithLength(char valueString[], int aValue, int length);
014 : int getIndexOfDuplication(int valueArray[], int maxIndex);
015 : 
016 : int main(int argumentCount, char * argumentValues[])
017 : {
018 :     int aValue;
019 :     int numberOfDigit;
020 :     
021 :     while (input(&aValue, &numberOfDigit) == 1)
022 :     {
023 :         perform(aValue, numberOfDigit);
024 :     }
025 :     
026 :     return EXIT_SUCCESS;
027 : }
028 : 
029 : int input(int * firstPointer, int * secondPointer)
030 : {
031 :     int returnValue = 1;
032 :     
033 :     scanf("%d %d", firstPointer, secondPointer);
034 :     
035 :     if (*firstPointer == 0  &&  *secondPointer == 0)
036 :     {
037 :         returnValue = 0;
038 :     }
039 : 
040 :     return returnValue;
041 : }
042 : 
043 : void perform(int aValue, int numberOfDigit)
044 : {
045 :     int valueArray[MAX_ELEMENTS];
046 :     int count = 0;
047 :     int maxNumber, minNumber;
048 :     int indexOfDuplication;
049 :     
050 :     for (count = 0; count < MAX_ELEMENTS; count++)
051 :     {
052 :         valueArray[count] = -1;
053 :     }
054 :     count = 0;
055 :     valueArray[count] = aValue;
056 :     
057 :     while (1)
058 :     {
059 :         maxNumber = getMaxNumber(aValue, numberOfDigit);
060 :         minNumber = getMinNumber(aValue, numberOfDigit);
061 :         
062 :         aValue = maxNumber - minNumber;
063 :         count++;
064 :         valueArray[count] = aValue;
065 :         indexOfDuplication = getIndexOfDuplication(valueArray, count);
066 :         
067 :         if (indexOfDuplication != -1)
068 :         {
069 :             printf("%d ", indexOfDuplication);
070 :             printf("%d ", valueArray[indexOfDuplication]);
071 :             printf("%d\n", count - indexOfDuplication);
072 :             break;
073 :         }
074 :     }
075 :     
076 :     return;
077 : }
078 : 
079 : int getMaxNumber(int aValue, int numberOfDigit)
080 : {
081 :     int maxNumber;
082 :     int index;
083 :     char valueString[MAX_LENGTH + 1];
084 :     
085 :     stringFromValueWithLength(valueString, aValue, numberOfDigit);
086 :     
087 :     for (index = 0; index < strlen(valueString) - 1; index++)
088 :     {
089 :         if (valueString[index] < valueString[index + 1])
090 :         {
091 :             char temporaryCharacter;
092 :             temporaryCharacter     = valueString[index];
093 :             valueString[index]     = valueString[index + 1];
094 :             valueString[index + 1] = temporaryCharacter;
095 :             index = -1;
096 :         }
097 :     }
098 :     
099 :     maxNumber = atoi(valueString);
100 :     
101 :     return maxNumber;
102 : }
103 : 
104 : int getMinNumber(int aValue, int numberOfDigit)
105 : {
106 :     int minNumber;
107 :     int index;
108 :     char valueString[MAX_LENGTH + 1];
109 :     
110 :     stringFromValueWithLength(valueString, aValue, numberOfDigit);
111 :     
112 :     for (index = 0; index < strlen(valueString) - 1; index++)
113 :     {
114 :         if (valueString[index] > valueString[index + 1])
115 :         {
116 :             char temporaryCharacter;
117 :             temporaryCharacter     = valueString[index];
118 :             valueString[index]     = valueString[index + 1];
119 :             valueString[index + 1] = temporaryCharacter;
120 :             index = -1;
121 :         }
122 :     }
123 :     
124 :     minNumber = atoi(valueString);
125 :     
126 :     return minNumber;
127 : }
128 : 
129 : void stringFromValueWithLength(char valueString[], int aValue, int length)
130 : {
131 :     char formatString[10];
132 :     
133 :     sprintf(formatString, "%%0%dd", length);
134 :     sprintf(valueString, formatString, aValue);
135 :     
136 :     return;
137 : }
138 : 
139 : int getIndexOfDuplication(int valueArray[], int maxIndex)
140 : {
141 :     int indexOfDuplication = -1;
142 :     int index1, index2;
143 :     
144 :     for (index1 = 0; index1 < maxIndex; index1++)
145 :     {
146 :         for (index2 = index1 + 1; index2 <= maxIndex; index2++)
147 :         {
148 :             if (valueArray[index1] == valueArray[index2])
149 :             {
150 :                 indexOfDuplication = index1;
151 :                 index1 = MAX_ELEMENTS;
152 :                 index2 = MAX_ELEMENTS;
153 :             }
154 :         }
155 :     }
156 :     
157 :     return indexOfDuplication;
158 : }
159 : 

This document was generated by NanigashiBiyori on 2013/01/14 at 00:05:15.