Как ввести вывод в массив в c

Мой код до сих пор:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <time.h>


int main()
{
    int i;
    int rollDice;
    int firInp;
    int secInp;

    printf("Enter the amount of faces you want your dice to have (MAX=24, MIN=1): ");
    scanf("%d", &firInp);
    printf("Enter the amount of throws you want(MAX=499, MIN=1): ");
    scanf("%d", &secInp);
    srand ( time(NULL) );
    if (((firInp < 25)&&(firInp > 1))&&((secInp < 500)&&(secInp > 1))){

        for(i = 0; i < secInp; i++){
            rollDice = (rand()%firInp) + 1;
            printf("%d \n", rollDice);
        }
    }
    else{
        printf("Sorry, these numbers don't meet the parameters. Please enter a number in the right parameters.");
    }

    return 0;
}

Я хочу иметь проценты в моем коде. Я думаю, что способ сделать это - сначала ввести вывод моего кода в массив. Если есть другой способ, пожалуйста, дайте мне знать.

редактировать: я хочу, чтобы вывод был примерно таким:

1 3 4 4 4 5 появление 1: 16,6 процента появление 3: ..и так далее

Разве (firInp > 1) не должно быть (firImp > 0) (и то же самое для secImp), если минимальное значение равно 1?

Ian Abbott 14.12.2020 15:47

Почему бы тебе не попробовать?

Paul Ogilvie 14.12.2020 15:48

Вы можете создать массив, который может содержать не менее secInp значений или максимум, который вы определили для secInp. Инициализируйте все элементы массива с 0 и в цикле увеличьте элемент массива, который соответствует выброшенному числу, и увеличьте общее число. В конце можно рассчитать процент. (Я предлагаю использовать имена переменных, которые соответствуют смыслу, например, faces вместо firInp и throws вместо secInp.)

Bodo 14.12.2020 15:50

Вместо того, чтобы хранить все выходные данные в массиве, вы можете использовать массив счетчиков. Этот массив будет состоять из firImp элементов (по одному счетчику на грань). Инициализируйте все счетчики на 0 и увеличивайте соответствующий элемент, когда вы бросаете число. (Поскольку номиналы начинаются с 1, а индексы массива начинаются с 0, вам нужно будет учесть смещение, вычитая 1 из номинала, чтобы получить индекс массива.)

Ian Abbott 14.12.2020 15:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
97
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо того, чтобы вводить выходные данные случайной функции в массив, вы можете просто использовать этот массив в качестве счетчика и увеличивать массив в позиции rollDice каждый раз, когда появляется число. Затем вы можете легко извлечь процент, просуммировав все элементы массива и разделив каждый элемент на эту сумму.

Ответ принят как подходящий

Вы можете создать массив целых чисел, размер которого равен количеству возможных значений, которые могут выдать ваши кости. Затем вы используете его как счетчик количества полученных вами вхождений, индекс массива будет представлять это выходное значение (вы можете использовать rollDice-1, так как 0 не является возможным результатом игры в кости), и значение в index будет количеством вхождений. После того, как вы закончите бросать кости, вам просто нужно распечатать процент следующим образом:

 for (int i=0;i<firInp;i++) { // firInp: n_faces = n_possible_values
printf("Occurrence of %d: %.1f percent\n", i+1, ((float)array[i]*100)/(float)secInp);
}

Я приближаюсь, но еще не там. Сейчас значения как минимум ниже сотни. иногда, если есть одно "1" из 6 значений, я получаю процент от 1 как сто. когда должно быть 16.6

NewCoder2001 14.12.2020 18:05

Для более точного значения вы должны привести к плаванию все элементы операции или определить их как плавающие с самого начала. Я исправил ответ, посмотрите. Теперь вы должны правильно увидеть 16,7 (16,66666 округляется до 16,7) процента, когда у вас есть только одно вхождение числа в примере с шестью бросками.

Matteo Pinna 15.12.2020 16:03

Другие вопросы по теме