LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Если ооочень в в лоб то как то так, только доработай проверку чтобы значения не были нулевыми, а то будет ошибка деления на ноль. Вероятность сам прикрутишь. Нормировать стоит как и ниже у тебя есть 1,0 вычитаешь из него всё что наизменял, остаток распределяешь как ниже по остальным.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
     srand(time(NULL));
     int a1 = random() % 100;
     int a2 = (100 - a1);
     int a3 = random() % a1; a1-=a3;
     int a4 = random() % a2; a2-=a4;
     int a5 = random() % a3; a3-=a5;
     int a6 = random() % a4; a4-=a6;
     int a7 = random() % a1; a1-=a7;

     int div = 100;

     float f1 = (float)a1 / div;
     float f2 = (float)a2 / div;
     float f3 = (float)a3 / div;
     float f4 = (float)a4 / div;
     float f5 = (float)a5 / div;
     float f6 = (float)a6 / div;
     float f7 = (float)a7 / div;


     printf("%d %d %d %d %d %d %d [%d]\n"
             "%f %f %f %f %f %f %f [%f]\n",
     a1,a2,a3,a4,a5,a6,a7,a1+a2+a3+a4+a5+a6+a7,f1,f2,f3,f4,f5,f6,f7,
     f1+f2+f3+f4+f5+f6+f7
            );
    return 0;
}

dron@gnu:~$ gcc cc.c
dron@gnu:~$ ./a.out 
Исключение в операции с плавающей точкой
dron@gnu:~$ ./a.out 
26 5 36 2 25 3 3 [100]
0.260000 0.050000 0.360000 0.020000 0.250000 0.030000 0.030000 [1.000000]
dron@gnu:~$ 

Исходная версия LINUX-ORG-RU, :

Если в лоб то как то так, только доработай проверку чтобы значения не были нулевыми, а то будет ошибка деления на ноль. Вероятность сам прикрутишь. Нормировать стоит как и ниже у тебя есть 1,0 вычитаешь из него всё что наизменял, остаток распределяешь как ниже по остальным.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
     srand(time(NULL));
     int a1 = random() % 100;
     int a2 = (100 - a1);
     int a3 = random() % a1; a1-=a3;
     int a4 = random() % a2; a2-=a4;
     int a5 = random() % a3; a3-=a5;
     int a6 = random() % a4; a4-=a6;
     int a7 = random() % a1; a1-=a7;

     int div = 100;

     float f1 = (float)a1 / div;
     float f2 = (float)a2 / div;
     float f3 = (float)a3 / div;
     float f4 = (float)a4 / div;
     float f5 = (float)a5 / div;
     float f6 = (float)a6 / div;
     float f7 = (float)a7 / div;


     printf("%d %d %d %d %d %d %d [%d]\n"
             "%f %f %f %f %f %f %f [%f]\n",
     a1,a2,a3,a4,a5,a6,a7,a1+a2+a3+a4+a5+a6+a7,f1,f2,f3,f4,f5,f6,f7,
     f1+f2+f3+f4+f5+f6+f7
            );
    return 0;
}

dron@gnu:~$ gcc cc.c
dron@gnu:~$ ./a.out 
Исключение в операции с плавающей точкой
dron@gnu:~$ ./a.out 
26 5 36 2 25 3 3 [100]
0.260000 0.050000 0.360000 0.020000 0.250000 0.030000 0.030000 [1.000000]
dron@gnu:~$