百钱买百鸡(通式)

Problem F: 百钱买百鸡问题
Time Limit: 1 Sec Memory Limit: 2 MB
Submit: 13527 Solved: 3792
[Submit][Status][Web Board]
Description

“百钱买百鸡”是我国著名的古代数学问题,中国古代数学家张丘建在他的《算经》中提出了这样一个问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
你的任务是求解下面这个问题。问题是这样描述的:a文钱可买一只公鸡,b文钱可买一只母鸡,c文钱可买d只小鸡。用m文钱买n只鸡,那么有公鸡x只、母鸡y只、小鸡z只。求解出符合题意的x,y,z。

Input

输入为一张表。第一行是一个固定不变的表头,格式见sample。后面有多行,每行为一组测试数据。每组测试数据由6个整数组成,分别为“a,b,c/d,m,n”。满足0<a,b,c,d<=50,50<=m,n<=108+1,并且母鸡和小鸡的单价不会相同。

Output

每组测试数据的运行结果输出为一张表,表头固定为“COCKS,HENS,CHICKS”。每组测试数据的一个可行解数出为一行,为三个整数:“x,y,z”。多组解按照公鸡数从少到多的顺序输出。若测试数据无解则输出“Cannot buy!”。两组测试数据之间用一个空行分隔开。

Sample Input

COCK,HEN,CHICK,MONEY,CHICKS
3,2,1/3,100,100
5,3,1/3,100,100
8,5,1/7,100,100
8,5,1/7,300,300

Sample Output

COCKS,HENS,CHICKS
0,40,60
5,32,63
10,24,66
15,16,69
20,8,72
25,0,75

COCKS,HENS,CHICKS
0,25,75
4,18,78
8,11,81
12,4,84

Cannot buy!

COCKS,HENS,CHICKS
8,40,252

HINT

本题重点在于了解多重循环的运行效率问题,减少一层循环可以降低很大规模的运算量。通过在循环体内加计数器可以统计出循环的运行次数,当测试数据变大时,运行次数的增长会非常可观,这就是超时的原因了。

#include <stdio.h>
#include <stdlib.h>
int main()
{   int a,b,c,d,cock,chick,hen,m,n;
    int flag=0;
    char ch;
    scanf("%s",&ch);//输入字符串
    while(scanf("%d,%d,%d/%d,%d,%d",&a,&b,&c,&d,&m,&n)!=EOF)//多组测试数据输入
{     flag=0;
    for(cock=0;cock<=m/a;cock++)//cock是公鸡的数量
       {
        chick=((n*b-m)-(b-a)*cock)*d/(b*d-c); //hen是母鸡的数量
        hen=n-cock-chick;//chick是小鸡的数量
            if((cock*a*d+hen*b*d+chick*c==m*d)&&(t%d==0)&&(hen>=0)&&(chick>=0))//满足条件总钱数为m,小鸡的数量是d的整数倍
              {
                if(flag==0)
                printf("COCKS,HENS,CHICKS\n");//每组数据开头打出目表
                flag++;
                printf("%d,%d,%d\n",cock,hen,chick);
              }
       }

        if(flag==0)
        {
            printf("Cannot buy!\n");
            printf("\n");

        }
        else
            printf("\n");
}}

条件判断的时候小鸡的那个不用是d的整数倍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值