I need to find the smallest number formed from the same digits of a given natural number n, using arrays.

#include <fstream>
#include <math.h>


int *list;
bool arrange(int length){

  for(int i=0;i<length;i++)
  {
	if(list[i]>list[i+1])
		swap(list[i],list[i+1]);

	

    }

  for(int i=0;i<length;i++)cout<<"my new list contains "<<list [i]<<endl;


return true;
}
bool file(char* Filename, int length)
{

	

	ifstream file;
	file.open(Filename);



	list=new int[length];
  for(int i=0;i<length;i++) 
  {
	file>>list[i];
	cout<<"the list contain: "<<list[i]<<endl;

    }
	arrange(length);

return true;
}

Edited 5 Years Ago by alexchen: n/a

Say you have the number: 251 The smallest number from those digits will be: 125 Therefore: digit1 = smallest number, digit2 = next smallest, etc.

Seperate the number into individual digits using an array. Find the smallest value and put this in the first index of a new array. Repeat this, removing the number you use each time, until you have no numbers left in the original array. Put all of the new array's values into a string and convert that to an int. This is your new number!

EDIT: You may want to use lists not an array.
EDIT EDIT: Oops got beaten too it. Ah well :)

Edited 5 Years Ago by SgtMe: n/a

I've found a code that works very well:

#include<iostream>
using namespace std;
int main()
{
    int n,a[10],i,j;
    for(i=0;i<=9;i++) a[i]=0;
    cin>>n;
    while(n>0)
    {
        a[n%10]++;
        n=n/10;
    }
    i=1;
    while(a[i]==0) i++;
    n=i;
    a[i]--;
    for(i=0;i<=9;i++)
        for(j=1;j<=a[i];j++)
            n=n*10+i;
    cout<<n;
    return 0;
}

I think it's still difficult for me to understand why for(i=0;i<=9;i++) a[i]=0;
before cin>>n and what is the significance of j.
Otherwise, the code looks like you are trying to explain.

Edited 3 Years Ago by mike_2000_17: Fixed formatting

Next time, please press the code button before you paste your code.

for (i=0; i<=9; i++){}

Ever done a while loop before? Consider a loop which is while (i<=9){} . At the end of the loop, you would have i++; to increment the value of i .
Basically (in a for loop): i=0 makes a new variable called i which is set to 0 . i<=9 means that we keep looping while i is less than or equal to 9. i++ means that we increment the value of i once each loop.

Edited 5 Years Ago by SgtMe: n/a

I didn't understand why for(...) at the beginning, a has to be 0.

I didn't understand why for(...) at the beginning, a has to be 0.

Who says it has to be 0? Test it. First thing in the program just print out the array.

This question has already been answered. Start a new discussion instead.