程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

百鸡问题(GESP二级 2023-3 T2)题解思路

balukai 2025-01-31 11:52:45 文章精选 7 ℃

首先 x,y,z,n,m分别表示的是每种鸡的价格,n,m,表示的总钱数和总数量

与百钱买百鸡一样,需要用n元钱买m只鸡

这里很容易想到课上的枚举,i,j,k 表示公鸡,母鸡,小鸡数量

因此:

int x,y,z,n,m;

int ans = 0;

cin >> x >> y >> z >> n >> m ;//n 钱 m数量

int i,j,k;

for ( i = 0 ; i <= n/x ;i ++)

{

for ( j = 0 ; j <= n/y ;j ++ )

{

int k = m - i - j ;

if ( i*x + j*y + k*1.0/z==n)

{

ans ++ ;

}

}

}

cout << ans << endl ;

测试第一个样例没问题,第二个样例会大很多,也就是有很多种是假的,为什么呢?

原因1:i<=n/x,如果n很大,得到的i就会很大,有可能会超过m,同理j也是一样,因此要加一个条件,i<=m

for ( i = 0 ; i <= n/x && i <= m ;i ++)

{

for ( j = 0 ; j <= n/y && j <= m ;j ++ )

{

int k = m - i - j ;

if ( i*x + j*y + k*1.0/z==n)

{

ans ++ ;

}

}

}

当然,这个不足以改变结果,要保证小鸡的数量不能出现负数,m-i-j>=0,否则就很奇怪了(与前面的题不一样的的x,y,z的值不是固定的)

大功告成!

int k = m - i - j ;

if ( i*x + j*y + k*1.0/z==n && k >= 0)

{

ans ++ ;

}

Tags:

最近发表
标签列表