История изменений
Исправление 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:~$