1 条题解
-
0
题目分析
本题需要根据食物中各成分的含量(克、卡路里、百分比)计算脂肪提供的卡路里占总卡路里的百分比。关键在于正确解析每种成分的单位,并根据单位计算其对应的卡路里,最后累加脂肪和总卡路里,计算百分比。
解题思路
成分解析: 每个成分由数值和单位组成,单位可能是 g(克)、C(卡路里)或 %(百分比)。需要根据单位计算该成分贡献的卡路里: g:根据成分类型(脂肪、蛋白质等)转换为卡路里(脂肪 9 卡 / 克,蛋白质 / 糖 / 淀粉 4 卡 / 克,酒精 7 卡 / 克)。 C:直接作为卡路里值。 %:记录为百分比,最后根据总卡路里计算实际值。 处理百分比: 所有百分比成分的总和不能超过 100%。计算总卡路里时,需先计算非百分比成分的卡路里,再根据百分比分配剩余部分。 累加计算: 对每个食物项,解析并计算各成分的卡路里(包括百分比转换),累加到总卡路里和脂肪卡路里中。遇到 - 时,输出当前结果并重置计数器
cpp
//poj 1929 //sep9 #include #include // 添加缺少的头文件 using namespace std; double tot,fat; char s[5][128];
void get_value(int i,double &v,int &tag) { int p=0; v=0; while(s[i][p]<='9'&&s[i][p]>='0') v=10*v+s[i][p]-'0',++p; if(s[i][p]'g') tag=0; else if(s[i][p]'C') tag=1; else tag=2;
}void insert() { double tmp_tot=0,tmp_fat=0;
double percent=0,weight=0; double v,v1; int tag,tag1; for(int i=0;i<5;++i){ get_value(i,v,tag); if(i0) v1=v,tag1=tag; if(tag0){ if(i0) weight+=v*9; else if(i4) weight+=v7; else weight+=v4; }else if(tag1) weight+=v; else percent+=v; }
tmp_tot=weight/(1-percent/100); if(tag10) tmp_fat=v19; else if(tag1==1) tmp_fat=v1; else tmp_fat=tmp_tot(v1/100); tot+=tmp_tot,fat+=tmp_fat; }int main() { tot=0,fat=0; int flag=0; while(1){ scanf("%s",s[0]); if(s[0][0]'-'){ if(flag0){ printf("%.0lf%%\n",fat*100/tot); tot=0,fat=0,flag=1; }else break; }else{ flag=0; for(int i=1;i<5;++i) scanf("%s",s[i]); insert(); }
} return 0;
}
- 1
信息
- ID
- 930
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者