august 发表于 2007-8-16 11:46:32

问个题目

战士们做了一个靶子,靶子分五格,中心是39环,从左起顺时针是23、17、24 、16。
    战士小李射了若干枪,每一次都击中靶子,并且正好是100环。问他打了几枪?每枪
    多小环?(靶子趣谈.c)      (答案:6枪,环数为17,17,17,17,16,16。)
答案是这样:

main()
{int i,j,k,l,m,n;
   for (i=0;i<3;i++)         /*打中39环的枪数*/
    for (j=0;j<=4;j++)       /*打中24环的枪数*/
   for (k=0;k<=4;k++)      /*打中23环的枪数*/
      for (l=0;l<=6;l++)   /*打中17环的枪数*/
       { n=100-i*39-j*24-k*23-l*17;/*余下的就为16环的枪数*/
   if (n%16==0)
       { m=n/16;
         printf("打中39环%d个,24环%d个,23环%d个,17环%d个,16环%d个,共打了%d枪.",
               i,j,k,l,m,i+j+k+l+m);
         exit(0);
       }
       }
   getch();
}
----------------------------------------------------------------------------------------------------------------------
但我改了下:
main()
{int i,j,k,l,m,n;
   for (i=0;i<3;i++)         /*打中39环的枪数*/
    for (j=0;j<=4;j++)       /*打中24环的枪数*/
   for (k=0;k<=4;k++)      /*打中23环的枪数*/
      for (l=0;l<=6;l++)   /*打中17环的枪数*/
       {
                     if((n=100-i*39-j*24-k*23-l*17)>=0)/*余下的就为16环的枪数*/
   if (n%16==0)
       { m=n/16;
         printf("打中39环%d个,24环%d个,23环%d个,17环%d个,16环%d个,共打了%d枪.",
               i,j,k,l,m,i+j+k+l+m);
                }
       }
   
}
但这样写好像也不能准确确定 五环的数加起来就刚刚等于100 ,但它确能输出正确答案.
然后我再这样写
-------------------------------------------------------------------------------------------------
main()
{int i,j,k,l,m,n;
   for (i=0;i<3;i++)         /*打中39环的枪数*/
    for (j=0;j<=4;j++)       /*打中24环的枪数*/
   for (k=0;k<=4;k++)      /*打中23环的枪数*/
      for (l=0;l<=6;l++)   /*打中17环的枪数*/
       {
                      n=100-i*39-j*24-k*23-l*17
                     if((n+i*39+j*24+k*23+l*17==100 ) && n>=0)/*余下的就为16环的枪数*/
   if (n%16==0)
       { m=n/16;
         printf("打中39环%d个,24环%d个,23环%d个,17环%d个,16环%d个,共打了%d枪.",
               i,j,k,l,m,i+j+k+l+m);
            }
       }
}

首先第一个是输不出来的,第二个感觉它的判断条件并不充分,但为什么也能输出正确答案呢?

august 发表于 2007-8-16 15:33:06

不好意思,偶又范傻了

coolpay64 发表于 2007-8-16 20:27:36

那august 便自我說明錯誤吧

august 发表于 2007-8-16 22:45:16

本来都是同样的意思,也没什么好说了..............
页: [1]
查看完整版本: 问个题目