001 : //========================================
002 : // program.c --- ACM ICPC 2012 Domestic B
003 : //  Created by M.Miyazaki [2013.01.13]
004 : //========================================
005 : 
006 : #include <stdio.h>
007 : #include <stdlib.h>
008 : #include <string.h>
009 : 
010 : /**
011 :  * 数値リストの最大要素数
012 :  */
013 : #define MAX_ELEMENTS 21
014 : 
015 : /**
016 :  * 最大桁数
017 :  */
018 : #define MAX_LENGTH 6
019 : 
020 : /*
021 :  * 関数のプロトタイプ宣言
022 :  */
023 : int main(int argumentCount, char * argumentValues[]);
024 : 
025 : /**
026 :  * メインプログラム.
027 :  *
028 :  * @param argumentCount 引数の数
029 :  * @param argumentValues[] 引数の値
030 :  * @return 終了時の値(正常終了ならEXIT_SUCCESS)
031 :  */
032 : int main(int argumentCount, char * argumentValues[])
033 : {
034 :     int aValue;          // 入力された数値
035 :     int numberOfDigit;   // 数値および桁数
036 :     
037 :     scanf("%d %d", &aValue, &numberOfDigit);
038 :     
039 :     while (aValue != 0 || numberOfDigit != 0)
040 :     {
041 :         int valueArray[MAX_ELEMENTS];   // 数値リスト
042 :         int count = 0;                  // 数値リスト用のカウンタ
043 :         int maxNumber, minNumber;       // 桁の入れ替えから求まる最大値と最小値
044 :         int indexOfDuplication;         // 重複要素のインデックス
045 :         
046 :         for (count = 0; count < MAX_ELEMENTS; count++)
047 :         {
048 :             valueArray[count] = -1;
049 :         }
050 :         count = 0;
051 :         valueArray[count] = aValue;
052 :         
053 :         while (1)
054 :         {
055 :             int index;
056 :             int index1, index2;   // 注目している2要素を指すインデックス
057 :             char formatString[10];
058 :             char valueString[MAX_LENGTH + 1];
059 :             
060 :             sprintf(formatString, "%%0%dd", numberOfDigit);
061 :             
062 :             sprintf(valueString, formatString, aValue);
063 :             for (index = 0; index < strlen(valueString) - 1; index++)
064 :             {
065 :                 if (valueString[index] < valueString[index + 1])
066 :                 {
067 :                     char temporaryCharacter;
068 :                     temporaryCharacter     = valueString[index];
069 :                     valueString[index]     = valueString[index + 1];
070 :                     valueString[index + 1] = temporaryCharacter;
071 :                     index = -1;
072 :                 }
073 :             }
074 :             maxNumber = atoi(valueString);
075 :             
076 :             sprintf(valueString, formatString, aValue);
077 :             for (index = 0; index < strlen(valueString) - 1; index++)
078 :             {
079 :                 if (valueString[index] > valueString[index + 1])
080 :                 {
081 :                     char temporaryCharacter;
082 :                     temporaryCharacter     = valueString[index];
083 :                     valueString[index]     = valueString[index + 1];
084 :                     valueString[index + 1] = temporaryCharacter;
085 :                     index = -1;
086 :                 }
087 :             }
088 :             minNumber = atoi(valueString);
089 :             
090 :             aValue = maxNumber - minNumber;
091 :             count++;
092 :             valueArray[count] = aValue;
093 :             
094 :             indexOfDuplication = -1;
095 :             
096 :             for (index1 = 0; index1 < count; index1++)
097 :             {
098 :                 for (index2 = index1 + 1; index2 <= count; index2++)
099 :                 {
100 :                     if (valueArray[index1] == valueArray[index2])
101 :                     {
102 :                         // 重複要素が見つかったため、ループから脱出する。
103 :                         indexOfDuplication = index1;
104 :                         index1 = MAX_ELEMENTS;
105 :                         index2 = MAX_ELEMENTS;
106 :                     }
107 :                 }
108 :             }
109 :             
110 :             if (indexOfDuplication != -1)
111 :             {
112 :                 printf("%d ", indexOfDuplication);
113 :                 printf("%d ", valueArray[indexOfDuplication]);
114 :                 printf("%d\n", count - indexOfDuplication);
115 :                 break;
116 :             }
117 :         }
118 :         
119 :         scanf("%d %d", &aValue, &numberOfDigit);
120 :     }
121 :     
122 :     return EXIT_SUCCESS;
123 : }
124 : 

This document was generated by NanigashiBiyori on 2013/01/14 at 00:06:27.