Разделение элементов массива на цифры - проблема с падением - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок, который, к сожалению, столкнулся с проблемой, которую не могу решить :) Заранее извиняюсь, поскольку английский не является моим родным языком.

Моя задача - отсортировать массив так, чтобы элементы ссначала идут те же цифры, а затем остальная часть массива.

Пример: входной массив: 1 22 43 444 51 16 7 8888 90 11 -1 После сортировки: 1,22,444,7,8888,11,43, 51,16,90

Массив ввода: 12, 33, 1, 19, 44, 11, 27, 76, 13 После сортировки: 33, 1, 44, 11, 12, 19, 27, 76, 13

Суть в том, что нам не разрешается использовать функции или более одного массива для решения проблемы.

Вот что я уже пробовал:

for (i=0; i<n-1; i++)
{
    for (j=0; j<n-i-1; j++)
    {
     digit=a[j]%10;
     while (a[j]>0)
     {
         if (a[j]%10!=digit) 
          same=0;
         a[j]/=10;
     }

     digit1=a[j+1]%10;
     while (a[j+1]>0)
     {
         if (a[j+1]%10!=digit1) 
          same1=0;
         a[j+1]/=10;
     }

     if (same==0 && same1==1)
     {
         temp=a[j+1];
         a[j+1]=a[j];
         a[j]=temp;
     }
    }
}

Я не уверен, что не так с кодом и почему происходит сбой программы.Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Это не совсем соответствует вашему определению проблемы с образцами, которые вы предоставляете, например, вы говорите:

Input array  : 12, 33, 1, 19, 44, 11, 27, 76, 13 
After sorting: 33, 1, 44, 11, 12, 19, 27, 76, 13

Но, согласно вашим утверждениям, 11 не должно бытьсамый первый элемент?

Пожалуйста, дайте мне знать, если я что-то упустил.В любом случае (и так как вы еще не упомянули язык) я сделал это на C ++ и он работает (насколько я мог понять, к чему вы стремились):

#include <iostream>
#include <vector>

using namespace std;


bool samedigits(int x)
{
    //if ( x < 10 ) return false;
    int digit = x%10;
    while(x>0)
    {
        if(x%10 != digit) return false;
        x = x/10;
    }
    return true;
}

int main() {
    int same = 0;
    int same1 = 1;
    int temp = 0;
    int n = 0;
    int digit = 0;
    int digit1 = 0;

    vector <int>a = { 1,22,43,444,51,16,7,8888,90,11, 99};

    for(int n : a) {
        cout << n << " ";
    }

     for (int i=0; i <= a.size() -1; i++)
        {

            for (int j=0; j <= a.size() - 1 ; j++)
            {
                if ( j != i) {

                    if (samedigits(a[j]) && samedigits(a[i])) {
                        if (a[j] > a[i]) {
                            int tmp = a[j];
                            a[j] = a[i];
                            a[i] = tmp;
                            continue;
                        }
                    }else if (! samedigits(a[j]) && samedigits(a[i]) ) {
                            int tmp = a[j];
                            a[j] = a[i];
                            a[i] = tmp;
                            continue;

                    } else if ( samedigits(a[j]) && ! samedigits(a[i]) ){
                        continue;
                    }else {
                        if (a[j] > a[i]) {
                            int tmp = a[j];
                            a[j] = a[i];
                            a[i] = tmp;
                            continue;
                        }
                    }
                }
            }
        }
    cout << endl;
    for(int n : a) {
        cout << n << " ";
    }

}

И он возвращает:

enter image description here

Я не получу, если вы рассматриваете однозначное число как «элементы с одинаковыми цифрами».Следовательно, я прокомментировал строку, которая может хорошо вписываться в эту точку зрения или нет.Не стесняйтесь комментировать.

Вы можете проверить это здесь:

https://www.jdoodle.com/online-compiler-c++

С уважением!

0 голосов
/ 23 ноября 2018

Это может помочь,

    for (int i = 0; i < in.length; i++) {
        for (int j = in.length - 1; j > i; j--) {
            if (in[j] < in[j - 1]) {
                int temp = in[j];
                in[j] = in[j - 1];
                in[j - 1] = temp;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...