Проблема с генератором чисел

361
26 июня 2022, 10:50

У меня есть массив и я его изменил алгоритмом Фишера-Йетса. Проблема заключается в том, что у меня числа в измененном массиве начинаются с нуля, а не с 1. Как можно это исправить ?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200
int arr[N], swap, j;
int FisherYets(int arr[], int size);
void sorting1(int arr[], int size);
int sorting2(int number);

int main() {
    srand(time(NULL));
    for (int i = 0; i < N; i++) {
        arr[i] = i + 1;
        printf("%d ", arr[i]);
    }
    printf("\n\n\n");
    FisherYets(arr, N);
    for (int i = 0; i < N; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n\n\n");
    
    
    sorting1(arr, N);
    
    printf("\n\n\n");
    
    
    return 0;
}
int FisherYets(int arr[], int size) {
    srand(time(NULL));
    for (int i = size; i > 1; i--) {
        j = 1+rand() % i ;
        swap = arr[i];
        arr[i] = arr[j];
        arr[j] = swap;
    }
    return arr;
}
void sorting1(int* arr, int size) {
    int sum = 0;
    for (int i = 0; i < N - 1; i++)
    {
        int position = i;
        for (j = i + 1; j < N; j++)
        {
            if (sorting2(arr[position]) > sorting2(arr[j]))
                position = j;
            else if (sorting2(arr[position]) == sorting2(arr[j])) {
                if (arr[position] > arr[j]) 
                    position = j;
                
            }
                
        }
        if (position != i)
        {
            swap = arr[i];
            arr[i] = arr[position];
            arr[position] = swap;
        }
    }
    printf("Sorted Array:\n");
    for (int i = 0; i < N; i++)
        printf("%d ", arr[i]);

}
int sorting2(int number) {
    int sum = 0;
    while (number) {
        sum += number % 10;
        number = number / 10;
    }
    return sum;
}
Answer 1

Куча ошибок в генерировании массива. В основном с индексацией неправильной. Результат сортировки тоже неверный. Я не смотрел почему.

int FisherYets(int arr[], int size) {
    // уже было в main
    //srand(time(NULL));
    for (int i = size; i > 1; ) {
        // индексы в массиве 0..N-1
        j = rand() % i ;
        // индексы в массиве 0..N-1
        --  i ;
        swap = arr[i];
        arr[i] = arr[j];
        arr[j] = swap;
    }
// warning: return makes integer from pointer without a cast 
    //return arr;
    return  0 ;
}
READ ALSO
Печать массива с отступом

Печать массива с отступом

Всем здравствуйтеТакая проблема: печатается только первый элемент с отступом, а все остальные без отступа

230
Управление другим процессом из дискорд-бота

Управление другим процессом из дискорд-бота

У меня есть приложение на Java, являющееся дискорд-ботомУ меня есть игровой сервер Arma 3

190
Поиск максимального и минимального элементов двумерного динамического массива

Поиск максимального и минимального элементов двумерного динамического массива

Как поменять местами максимальный и минимальный элемент?

165
Qt-диалог &amp; SQL на Lua

Qt-диалог & SQL на Lua

Хочу встроить Lua в свою программу, написанную на Qt/C++Нашел пока статьи и обсуждения о простом встраивании Lua в Си программу (пример)

204