アルファベットで表されたボート名(A~Z)と貸出(O)、返却(I)、時間が各行に示されています。それぞれの貸し出し時間の総時間を出力します。
<入力>
A O 09:00
B O 09:10
A I 09:20
A O 09:30
B I 09:40
A I 09:50
<出力>
1:10
まずすべてをbufに読み込んでからboatnameとboatio,timeに振り分けています。
timeにデータが読み込めていないのか、OIの判定がおかしいのか
うまく計算できません。
どこが悪いのかご指摘お願いします。
#include<stdio.h>
#include<stdlib.h>
char buf[32][9],boatname[52],boatio[52];
int time[52][5];
int i=0,j,k,l,n,subtotal,total=0,final[4];
int calc(int k,int l){ //各ボートがそれぞれ何分借りられていたかを計算する
subtotal=(time[l][5]*10+time[l][6])*60+time[l][8]*10+time[l][9]-((time[k][5]*10+time[k][6])*60+time[k][8]*10+time[k][9]);
return subtotal;
}
int main(void){
do{ fgets(buf[i],9,stdin); //まず一行読み込み boatname[i]=buf[i][0]; boatio[i]=buf[i][2]; for(j=4;j<=8;j++){ time[i][j]=atoi(buf[j]); } i++; }while(fgets(buf[i],9,stdin)!=NULL); //次の行が読み込めなかったら終了 for(k=0;k<i;k++){ for(l=k;l<=i;l++){ if(boatname[k]==boatname[l]&&boatname[k]=='O'&&boatname[l]=='I'){ total+=calc(k,l); } } } final[0]=(total/60)/10; final[1]=(total/60)-final[0]*10; final[2]=(total%60)/10; final[3]=total%60-final[2]*10; if(final[0]==0&&final[1]==0){ printf("0:%d%d\n",final[2],final[3]); }else{ printf("%d%d:%d%d\n",final[0],final[1],final[2],final[3]); } return 0;
}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/17 11:03
2015/11/17 11:07