#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> // 2014年4月1日 08:30からの経過時間(分)から日時を出す int minutes2dateAndTime(int min, char *s) { // 1900年から、2014年4月1日 08:30までの経過秒数→1396308600秒 time_t fixed_sec = min * 60 + 1396308600; //1900年からの秒数に変換 struct tm *tm = localtime(&fixed_sec); // 文字列にして戻す(別の形式でも良いが、とりあえず"2018/1/1 0:00"の形で) // mainの方でメモリ確保して貰って、こっちで書き込むという形にする(コピーが面倒だから) memset(s,0,sizeof(s)); sprintf(s,"%d/%02d/%02d %02d:%02d",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min); return 0; }
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> // 2014年4月1日 08:30からの経過時間(分)を算出する int dateAndTime2minutes(char *s1) { // char s1[] ="2014/4/3 8:08"; // char s2[] ="/ :"; // デリミタは"/", " ", ":" の3つ char* tok; // 2014年4月1日8:30の累積分数 struct tm base_tm; base_tm.tm_year = 2014 - 1900; // 2014年 base_tm.tm_mon = 4 - 1; // 4月 base_tm.tm_mday = 1; // 1日 base_tm.tm_hour = 8; // 8時 base_tm.tm_min = 30; // 30分 base_tm.tm_sec = 0; // 0秒 time_t time = mktime(&base_tm); int base_min = (int)time/60; /////// struct tm tm; tok = strtok( s1, s2 ); /* 初回 */ tm.tm_year = atoi(tok)-1900; tok = strtok( NULL, s2 ); /* 2回目*/ tm.tm_mon = atoi(tok) -1 ; tok = strtok( NULL, s2 ); /* 3回目 */ tm.tm_mday = atoi(tok); tok = strtok( NULL, s2 ); /* 4回目 */ tm.tm_hour = atoi(tok); tok = strtok( NULL, s2 ); /* 5回目 */ tm.tm_min = atoi(tok); tm.tm_sec = 0; //秒はデフォルト0 time = mktime(&tm); int target_min = (int)time/60; return target_min - base_min; }
(Step 1) アイコンをコピー → [ファイル]→[クリップボードからキャンパス作成]→
(Step 2) [レイヤー]→[輝度を透明度に変換]
(Step 3) [合成モード]→[カラー2値化]
(Step 4) [不透明度]→80%くらい
(Step 5) [不透明度保護]くりっく
(Step 6) 赤を指定して、2値ペンで塗りたくる
以上
/* gcc -g second_job.cpp -o second_job 考え方 (1)8時間労働、8時間睡眠、8時間余暇を基本として考える。 (2)8時間余暇の中には、通勤時間1.5時間 食事時間1.5時間が含まれるものとする (3)とすれば、残りの余暇5時間をどのような使い方をするのかが問題となる。 (4)十分な余暇は、基本的に正業のパフォーマンスを上げるものであるとする。 (4)余暇を使った副業は、収入になるものとする */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct person { double first_business_hour; double sleep_hour; double commute_time; double meal_time; double max_remain_time; double second_business_hour; double final_remain_time; double fb_fee; double sb_fee; double fatigue_func; double cost; struct person *prev; /* 前の構造体を示すポインタ */ struct person *next; /* 次の構造体を示すポインタ */ } PERSON; double min(double a, double b) { if (a > b) return b; else return a; } double diff(double a, double b) { if (a > b) return a - b; else return 0; } double fatigue_func(double time) { if (time < 1.0){ return 0.5; } else if ((time >= 1.0) && (time < 3.0)){ return (1.0 - 0.5)/(3.0 - 1.0) * (time - 1.0) + 0.5; } else { return 1.0; } } const double First_Business_hourly_fees = 2000; const double First_Business_extra_fees = First_Business_hourly_fees * 1.25; const double Second_Business_hourly_fees = 1000; int main() { srand(13); PERSON* first_p_person= (PERSON*)malloc(sizeof(PERSON)); PERSON* last_p_person= (PERSON*)malloc(sizeof(PERSON)); PERSON* p_prev_person = first_p_person; for (int i = 0; i < 100; i++){ PERSON* p_person= (PERSON*)malloc(sizeof(PERSON)); memset(p_person, 0, sizeof(PERSON)); //////// ポインタの貼り替え ////////// p_prev_person->next = p_person; p_person->next = last_p_person; p_person->prev = p_prev_person; p_prev_person = p_person; ////////////////////////////////////// p_person->first_business_hour = 8.0 + 2.0 * (double)rand()/RAND_MAX; // 8~10時間 p_person->first_business_hour = 8.0; // 8~10時間 p_person->sleep_hour = 7.0 + 1.0 * (1.0 - 2.0 * (double)rand()/RAND_MAX); // 6~8時間 p_person->commute_time = 1.0 + 0.5 * (1.0 - 2.0 * (double)rand()/RAND_MAX); // 0.5~1.5時間 p_person->meal_time = 1.0 + 0.5 * (1.0 - 2.0 * (double)rand()/RAND_MAX); // 0.5~1.5時間 p_person->max_remain_time = 24.0 - p_person->first_business_hour - p_person->sleep_hour - p_person->commute_time - p_person->meal_time; // 最悪でも3時間の、最良で9時間の余暇時間ができる #if 1 p_person->second_business_hour = p_person->max_remain_time * (double)rand()/RAND_MAX; //余暇の時間を適当に振る #else p_person->second_business_hour = 0; #endif p_person->final_remain_time = p_person->max_remain_time - p_person->second_business_hour; p_person->fb_fee = min(p_person->first_business_hour, 8.0) * First_Business_hourly_fees + diff(p_person->first_business_hour, 8.0) * First_Business_extra_fees; p_person->sb_fee = p_person->second_business_hour * Second_Business_hourly_fees; p_person->fatigue_func = fatigue_func(p_person->final_remain_time); p_person->cost = p_person->fb_fee * p_person->fatigue_func + p_person->sb_fee; //printf("%d:cost = %f\n", i, p_person->cost); } double total_cost = 0.0; PERSON* p_person = first_p_person->next; printf("本業時間,睡眠時間,通勤時間,食事時間,余暇時間,副業時間,残余暇時間,RATIO,収入\n"); while(p_person->next != last_p_person){ total_cost += p_person->cost; printf("%f,%f,%f,%f,%f,%f,%f,%f,%f\n", p_person->first_business_hour, p_person->sleep_hour, p_person->commute_time, p_person->meal_time, p_person->max_remain_time, p_person->second_business_hour, p_person->final_remain_time, p_person->fatigue_func, p_person->cost ); p_person = p_person->next; } printf("total cost = %f\n", total_cost); }