0
点赞
收藏
分享

微信扫一扫

不用循环的鸡兔同笼

村里搬砖的月野兔 2022-04-04 阅读 47
c++

这是我第一篇文章,大家多多关照!

这里先说一下,我喜欢用格式化输入输出,想用cout和cin的改过来就可以了。

今天给大家讲一下一题“坑死我”的题。

开始一看就想用循环,于是写出:

#include<cstdio>
int main(){
  int n,max=-1000,min=1000,t,flag=0;
  scanf("%d",&n);
  for(int i=0;i<n;i++){//i是兔子,j是鸡
    for(int j=n;j>=0;j--){
      if(i*4+j*2==n){
        if(min>i+j){
          flag=1;
          min=i+j;
        }
        if(max<i+j){
          flag=1;
          max=i+j;
        }
      }
    }
  }
  if(flag==0)
    printf("0 0");
  else
    printf("%d %d",min,max);
  return 0;
}

 然后就……

 我也不知道为啥,测试点就是不对。

最后终于找到了正确代码,自己写了下注释,希望大家能理解。

AC代码:

#include<cstdio>
int main(){
  int n;
  scanf("%d",&n); //要想总数最少,兔子要最多;要想总数最多,鸡要最多。
  if(n%2!=0)
    printf("0 0");//鸡和兔子的腿数都是双数,和不可能是奇数。确保n肯定能被2整除,以执行下一步。
  else if(n%4!=0)
    printf("%d %d\n",n/4+1,n/2); /*兔子最多,就用它除以四,达到最多数量,此时绝对还剩2条腿,
因为n不是奇数,又不能被四整除;此时n已经是2的倍数,因此取鸡的最多数就是把总数除以二。*/
  else
    printf("%d %d\n",n/4,n/2);//n如果是四的倍数,直接除以四;与上面同理。
  return 0;
}

我是不是讲得有点太复杂了?那我再用自己的样例解释一下吧。

 大家懂了吗?记得点赞哦!

举报

相关推荐

0 条评论