/* gcc -g harassment.cpp -o harassment */ #include <stdio.h> #include <stdlib.h> /* 設定 上司と部下の気質のタイプを5つに設定 上司と部下が一致していると 部下のパフォーマンスは120% 上司と部下が1つずれていると 部下のパフォーマンスは100% 上司と部下が2つずれていると 部下のパフォーマンスは80% 上司と部下が3つ以上ずれていると 部下のパフォーマンスは60% 上司と部下が4つ以上ずれていると 部下のパフォーマンスは40% 上司と部下が5つ以上ずれていると 部下のパフォーマンスは20% 上司に度量がない場合 移動量 ±0 → 部下のパフォーマンスは? 上司に度量がある場合 移動量 ±1 上司に度量がない場合 移動量 ±2 部下に度量がない場合 移動量 ±0 部下に度量がある場合 移動量 ±1 部下に度量がある場合 移動量 ±2 */ #define MAX_CHARACTER 6 #define STAFF_GENEROUS 0 //部下の度量(唯一の変数) // 乗客の変数用構造体 typedef struct person { int character; // 0,1,2,3,4,5 人格を示す(×能力の大きさではない) int generous; // 0,1,2,3,4,5 度量の大きさを示す } PERSON; int min(int a, int b) { if (a < b) return a; else return b; } int max(int a, int b) { if (a > b) return a; else return b; } double performance(int b_character, int s_character, int b_generous, int s_generous) { /* 0 → 120 1 → 100 2 → 80 3 → 60 4 → 40 5 → 20 |--------| b_min b_max |--------| s_min s_max */ int b_max = min(b_character + b_generous, 5); int b_min = max(b_character - b_generous, 0); int s_max = min(s_character + s_generous, 5); int s_min = max(s_character - s_generous, 0); int v1 = max(b_min - s_max, 0); int v2 = max(s_min - b_max, 0); int v = max(v1, v2); double f = 120.0 - 40.0 * v; return f; } int main() { PERSON boss; PERSON staff[100]; srand(10); /* // 上司の設定 boss.character = 5; //rand() % MAX_CHARACTER ; boss.generous = 3; */ for( int a = 0; a < 6; a++){ for( int b = 0; b < 6; b++){ boss.character = a; boss.generous = b; // 部下の設定 for(int i = 0; i < 100; i++){ staff[i].character = rand() % MAX_CHARACTER ; staff[i].generous = STAFF_GENEROUS; } // 計算 double sum = 0.0; for(int i = 0; i < 100; i++){ sum += performance(boss.character, staff[i].character, boss.generous, staff[i].generous); } //sum = (sum / 100.0) * (0.5 + boss.character * 0.1) ; sum = (sum / 100.0); #if 0 printf("boss.character:%d\t", a); printf("boss.generous:%d\t", b); printf("Average sum = %f\n", sum); #endif printf("%d %d %f\n",a,b,sum); } printf("\n"); } }
_ https://dotinstall.com/lessons/basic_postgresql