|
| 1 | +/* |
| 2 | + * NEXT LARGEST NUMBER |
| 3 | + * |
| 4 | + * INPUT : 459863 |
| 5 | + * OUTPUT : 46589 |
| 6 | + * |
| 7 | + * LOGIC : |
| 8 | + * |
| 9 | + * 4 5 9 8 6 3 |
| 10 | + * |
| 11 | + * STEP 1 : INITIAL SETUP |
| 12 | + * |
| 13 | + * PLACEVALUE =10 |
| 14 | + * LEFT = (NUM / PLACEVALUE) % 10 |
| 15 | + * RIGHT = NUM % 10 |
| 16 | + * |
| 17 | + *STEP 2 : |
| 18 | + * |
| 19 | + * PLACEVALUE RIGHT LEFT RIGHT<LEFT ACTIONS |
| 20 | + * |
| 21 | + * 10 3 6 CONTINUE RIGTH =LEFT, LEFT = (NUM/PLACEVALUE)%10 |
| 22 | + * 100 6 8 CONTINUE " |
| 23 | + * 1000 8 9 CONTINUE " |
| 24 | + * 10000 9 5 BREAK |
| 25 | + * |
| 26 | + * THEREFORE WE GOT PLACEVALUE =10000 AND LEFT = 5 , RIGHT =9 |
| 27 | + * |
| 28 | + * STEP 3 : |
| 29 | + * |
| 30 | + * FROME STEP TWO WE GOT THAT 5 HAS TO BE REPLACED WITH THE VALUES |
| 31 | + * |
| 32 | + * (I.E) WE CAN REPLACE 5 WITH EITHER |
| 33 | + * |
| 34 | + * 9 |
| 35 | + * 8 |
| 36 | + * 6 |
| 37 | + * 3 |
| 38 | + * |
| 39 | + * NOW PICK THE VALUE WHICH IS GREATER THAN 5 |
| 40 | + * |
| 41 | + *PLACEVALUE CONDITION ACTION RIGHT |
| 42 | + * |
| 43 | + * 1 3>5 CONTINUE 6 |
| 44 | + * 10 6>5 BREAK |
| 45 | + * |
| 46 | + * |
| 47 | + * STEP 4 : NOW SWAP THE VALUES |
| 48 | + * |
| 49 | + * FROM STEP2 AND STEP 3 WE GOT THAT WHICH VALUES HAVE TO BE REPLACED |
| 50 | + * |
| 51 | + * WE KNOW |
| 52 | + * |
| 53 | + * LEFT = 5 PLACEVALUE = 10000 |
| 54 | + * RIGHT = 6 PLACEVALUE = 10 |
| 55 | + * |
| 56 | + * PERFORM SWAP |
| 57 | + * |
| 58 | + * 4 5 9 8 6 |
| 59 | + * |
| 60 | + * 4 6 9 8 5 |
| 61 | + * |
| 62 | + * |
| 63 | + * STEP 5 : PERFORM PARTIAL REVERSING |
| 64 | + * |
| 65 | + * FINAL RESULT = 4 6 5 8 9 |
| 66 | + * |
| 67 | + * |
| 68 | + * STEP 6 : PRINT ALL THE POSSIBILITIES |
| 69 | + * |
| 70 | + * |
| 71 | + */ |
| 72 | +import java.util.*; |
| 73 | +public class NextLargestNumber { |
| 74 | + |
| 75 | + /** |
| 76 | + * @param args |
| 77 | + */ |
| 78 | + static int smallest(int n) |
| 79 | + { |
| 80 | + int k=0; |
| 81 | + int a[]=new int[10]; |
| 82 | + while(n!=0) |
| 83 | + { |
| 84 | + a[k]=n%10; |
| 85 | + n=n/10; |
| 86 | + k++; |
| 87 | + } |
| 88 | + for(int i=0;i<k;i++) |
| 89 | + { |
| 90 | + for(int j=i+1;j<k;j++) |
| 91 | + { |
| 92 | + if(a[i]>a[j]) |
| 93 | + { |
| 94 | + int temp=a[i]; |
| 95 | + a[i]=a[j]; |
| 96 | + a[j]=temp; |
| 97 | + } |
| 98 | + } |
| 99 | + } |
| 100 | + |
| 101 | + //for(int i=0;i<k;i++) |
| 102 | + //printf("%d ",a[i]); |
| 103 | + int res=0; |
| 104 | + int i=0; |
| 105 | + while(k--!=0) |
| 106 | + { |
| 107 | + res = res*10+a[i]; |
| 108 | + i++; |
| 109 | + } |
| 110 | + return res; |
| 111 | + } |
| 112 | + static int swap(int number,int pv1,int pv2) |
| 113 | + { |
| 114 | + int val1 = (number/pv1)%10; |
| 115 | + int val2 =(number/pv2)%10; |
| 116 | + number = number - val1*pv1 + val2*pv1; |
| 117 | + number = number - val2*pv2 + val1*pv2; |
| 118 | + |
| 119 | + return number; |
| 120 | + } |
| 121 | + |
| 122 | + static int reverse(int number,int pv) |
| 123 | + { |
| 124 | + int rev = number/pv; |
| 125 | + int num =number%pv; |
| 126 | + int power =1; |
| 127 | + while(num/power!=0) |
| 128 | + { |
| 129 | + int digit = (number/power)%10; |
| 130 | + rev =rev*10+digit; |
| 131 | + power=power*10; |
| 132 | + } |
| 133 | + return rev; |
| 134 | + } |
| 135 | + static int nextLargest(int number) |
| 136 | + { |
| 137 | + int placeValue1 =10; |
| 138 | + int placeValue2 = 1; |
| 139 | + int left = (number/placeValue1)%10; |
| 140 | + int right = (number)%10; |
| 141 | + |
| 142 | + //find the position which value has to be replaced |
| 143 | + while(number/placeValue1 !=0) |
| 144 | + { |
| 145 | + |
| 146 | + if(left<right) |
| 147 | + { |
| 148 | + while(true) |
| 149 | + { |
| 150 | + |
| 151 | + right=(number/placeValue2)%10; |
| 152 | + |
| 153 | + if(right>left) |
| 154 | + break; |
| 155 | + placeValue2=placeValue2*10; |
| 156 | + } |
| 157 | + number = swap(number,placeValue1,placeValue2); |
| 158 | + number = reverse(number,placeValue1); |
| 159 | + break; |
| 160 | + } |
| 161 | + |
| 162 | + placeValue1= placeValue1*10; |
| 163 | + right = left; |
| 164 | + left =(number/placeValue1)%10; |
| 165 | + } |
| 166 | + return number; |
| 167 | + |
| 168 | + } |
| 169 | + public static void main(String[] args) { |
| 170 | + // TODO Auto-generated method stub |
| 171 | + Scanner input = new Scanner(System.in); |
| 172 | + int number = input.nextInt(); |
| 173 | + //int b =input.nextInt(); |
| 174 | + // if(number>b) |
| 175 | + // number=smallest(number); |
| 176 | + number =nextLargest(number); |
| 177 | + System.out.println("NEXT LARGEST = "+number); |
| 178 | + int count =0; |
| 179 | + int next=0,flag=0; |
| 180 | + while(true) |
| 181 | + { |
| 182 | + |
| 183 | + next = nextLargest(number); |
| 184 | + System.out.println(next); |
| 185 | + if(next==number) |
| 186 | + break; |
| 187 | + |
| 188 | + count++; |
| 189 | + number=next; |
| 190 | + } |
| 191 | + System.out.println("TOTAL POSSIBILITIES "+count); |
| 192 | + |
| 193 | + } |
| 194 | + |
| 195 | +} |
0 commit comments