题解 | #百鸡问题#

百鸡问题

https://www.nowcoder.com/practice/01d161052db64c249a47fc723b4fd5db

#include <stdio.h>

int main() {
    int x,y,z;
    int n;
    //int cnt=0;

    scanf("%d",&n);

    for(x=0;x<=100;x++){
         for(y=0;y<=100;y++){
            //递增输出,z直接100-x-y就行了,少一层循环
            z=100-x-y;
            
//          cnt++;
			
            if(5*x+3*y+(1.0/3.0)*z<=n&&z>=0){
                printf("x=%d,y=%d,z=%d\n",x,y,z);

            }
            //递增输出,一旦不符合后面都不符合,直接中止本层for
            //cnt=10201=>cnt=105
			else{
				break;
			}

			}

         }

    //printf("cnt=%d",cnt);

    return 0;
}

1.本题踩到两次陷阱

1.1 对1/3与1.0/3.0的概念混淆,导致一直为(1/3)==0,使得输出出错

1.2 使用100-x-y计算z,但是起始忽略了负数的问题,导致500的测试组不通过

2.优化

2.1 使用约束条件去掉第三重循环

2.2 根据递增的输出特性,合理使用break进行中止。

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-20 12:46
瘦嘟嘟右卫门:百度文库网盘的暑期也没约面吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务