略。原文参照。
入力データはカレントディレクトリの009.csvに保存されているものとします。
l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,v1,v2
(1件目のデータ:全て整数)
l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,v1,v2
(2件目のデータ:全て整数)
...
...
列車がすれ違う区間の番号(1件目のデータに対する出力)
列車がすれ違う区間の番号(2件目のデータに対する出力)
...
...
1,1,1,1,1,1,1,1,1,1,40,60
1,1,1,1,1,3,3,3,3,3,50,50
10,10,10,10,10,10,10,10,10,10,50,49
4
7
6
まず、1次方程式で、全体の長さのどこですれ違うかを求めます。その値を元にどこまで進んだ時にすれ違うのかを調べます。
#include <stdio.h> int main(){ //in[10]とin[11]は列車の速さ int in[12]; FILE *fp; fp = fopen("009.csv","r"); while(EOF != fscanf(fp,"%d",&(in[0]))){ int i; double sum,x; for(i=1;i<12;i++)fscanf(fp,",%d",&(in[i])); sum=0; for(i=0;i<10;i++)sum+=in[i]; //全体の区間内のどこですれ違うかを計算。 x = sum * in[10] / (in[10]+in[11]); //i=0; //for(sum=in[i];sum<x;sum+=in[i])i++; //上の省略形 for(sum=in[i=0];sum<x;sum+=in[++i]); printf("%d\n",i+1); } fclose(fp); return 0; }
ちょっとめんどくさい問題ですが、難しくはないはずです。ボンミスしないように解きましょう。