SDUST 软件工程2016-作业4-A 百钱买鸡问题

解决百钱买鸡问题原本并不困难,关键的是这道题对其进行了升级,测试数据太大,传统的解法,像三重循环,二重循环都会导致超时。

这道题正确的解法应该是结合数学方程进行化简,将其转化为1层循环:

x+y+z=n

ax+by+c/d*z=m

由上述两个方程联立可用其他量表示出y来。从而只需要枚举x就能解决该题。

在求方程之后注意要化简,只有能整除的时候才进行整除。最后与m比较的时候因为c/d的问题,所以等式两边同时乘以d以消除误差

最后千万不要加上z%d==0的条件,因为例如当3元买12小鸡的时候,实际情况是最少买四只小鸡是合法情况不会出现小数,但z%12会变成最少买12只小鸡才是合法情况,所以应该去掉这个条件。

 1 #include <stdio.h>
 2 int main(){
 3     char s[100];
 4     long long  a,b, c, d, m, n;
 5     gets(s);
 6     int first=0;
 7     int ok;
 8     int k=0;
 9     while(scanf("%lld,%lld,%lld/%lld,%lld,%lld",&a,&b,&c,&d,&m,&n)!=EOF){
10         k++;
11         if(first==0)first=1;else printf("\n");
12         ok=0;
13         for(long long  i=0;i<=m/a;i++){
14             long long    j;
15             if((m*d-c*n-(a*d-c)*i)%(b*d-c)==0)
16             j=(m*d-c*n-(a*d-c)*i)/(b*d-c);
17             if(j<0)continue;
18             long long  z=n-i-j;
19             if((z*c+i*a*d+j*b*d)==m*d&&z>=0){
20                 if(!ok)printf("COCKS,HENS,CHICKS\n");
21                 ok=1;
22                 printf("%lld,%lld,%lld\n",i,j,z);
23             }
24         }
25         if(!ok)printf("Cannot buy!\n");
26
27     }
28     return 0;
29 }
时间: 2024-08-27 00:27:15

SDUST 软件工程2016-作业4-A 百钱买鸡问题的相关文章

0002_百钱买鸡

百钱买鸡:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱? 思路:设定公鸡,母鸡,小鸡各买x,y,z只,则满足下列条件: x+y+z=100; 5x+3y+z/3=100: 1 __author__ = 'qq593' 2 # /usr/bin/python 3 # -*- coding:utf-8 -*- 4 5 #x is the unknown number 6 for y in ra

Java实现百钱买百鸡

1.问题描述 今有鸡翁一,值钱伍:鸡母一,值钱三:鸡鶵三,值钱一.凡百钱买鸡百只,问鸡翁.母.鶵各几何?答曰:鸡翁四,值钱二十:鸡母十八,值钱五十四:鸡鶵七十八,值钱二十六.又答:鸡翁八,值钱四十:鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七.又答:鸡翁十二,值钱六十:鸡母四.值钱十二:鸡鶵八十 四,值钱二十八." 2.实现源码 /** * @Title:HundredHen.java * @Package:com.you.hen * @Description:百钱买百鸡 * @author:

3. 百钱买白鸡问题

这是一个古老而非常经典的问题,最早源自中国古代的算经,中国古代数学家张丘建在他的算经中提出了著名的百钱买白鸡的问题: 鸡翁1, 值钱5,鸡母1,值钱3,鸡雏3值钱1,百钱买白鸡,问翁,母,雏各几何? 100文钱买100只鸡,公鸡5文钱一只,母鸡3文一只,小鸡3只1文钱:100文钱买了100只鸡,请问公鸡,母鸡,小鸡各有多少? #include <stdio.h> #include <stdlib.h> int main() {     int i,j,k;     for(i=0;

百钱买百鸡

public class Sample1//百钱买百鸡/*鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一.百钱买百鸡,问鸡翁.鸡母.鸡雏各几何?*/{ public static void main(String [] args){ int x;//可买鸡翁只数 int y;//可买鸡母只数 int z;//可买鸡雏只数 for ( x=0;x<=100/5 ;x++ ) { for ( y=0;y<=33 ;y++ ) { z=100-x-y; if (x*5+y*3+z/3==100&am

华为OJ平台——百钱买百鸡问题

题目描述: 元前五世纪,我国古代数学家张丘建在<算经>一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一. 百钱买百鸡,问鸡翁.鸡母.鸡雏各几何? 思路: 这道题很简单,假设鸡翁 i 只, 鸡母 j 只, 则有 i + j + k = 100 5*i + 3*j + k/3 = 100 由以上两个等式我们可以推出: j = 25 - i * 7/4 ; k = 75 + i * 3/4 ; 由于i. j. k 必须是0或正整数,所以 i 必须是4的倍数,因此我们下面的程序中也是

百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果!

/** * 百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果! * */ public class Test3 { public static void main(String[] args) { int c = 0; for (int a = 0; a < 100; a++) { for (int b = 0; b < 100; b++) { if ((7 * a + 4 * b) == 100) { c++; System.o

PHP中百钱买百鸡

<html><head><title>百钱买百鸡</title><meta http-equiv="content-type" content="text/html;charset=utf-8"/></head><?php/*题目:公鸡一,值钱五,母鸡一,值钱三,小鸡三,值钱一.百钱买百鸡,问公鸡.母鸡.小鸡各几何?*///$g;可买公鸡数//$m;可买母鸡数//$x;可买小鸡数$coun

Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数

Craps赌博游戏 游戏规则:同时扔两颗骰子,第一次扔出的点数数7或则11玩家胜,扔出2.3或则12庄家胜利,否则继续扔骰子. 以后只要扔出和第一次相同的点数玩家胜,扔出7庄家胜. 玩家每次进入有1000的筹码,输完游戏结束! 1 public static void gambleGame() { 2 int a = 0; 3 int money = 1000; 4 for (int j = 0;; j++) { 5 if (money > 0) { 6 System.out.println(&qu

百钱买百鸡问题C++(穷举)

//鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡 /* 鸡翁 x 个 5x 鸡母 y 个 3y 小鸡 z 个 z/3 化简为:7*x+4*y=100 */ #include "stdafx.h" #include <iostream> using namespace std; int main() { int x, y, z; for (x = 0; x <= 100; x++) for (y = 0; y <= 100; y++) { if (7