读书人

鸡兔同笼有关问题运行正确提交异常

发布时间: 2012-03-22 17:43:57 作者: rapoo

鸡兔同笼问题,运行正确,提交错误

C/C++ code
/* Note:Your choice is C IDE */#include "stdio.h"void main(){       long n,s[100][2],i,head,foot,rab_num,chi_num;    char tag[100];    //printf("请输入测试的数据个数:");       scanf("%d",&n);    for(i=0;i<n;i++)    {           s[i][0]=0;        s[i][1]=0;        tag[i]='Y';        //printf("输入头与脚的数目");        scanf("%d %d",&head,&foot);        if(foot%2!=0||head*4<foot)        tag[i]='N';                else         {            rab_num=foot/2-head;            chi_num=head-rab_num;            s[i][0]=rab_num;            s[i][1]=chi_num;        }            }    printf("\n");    for(i=0;i<n;i++)    {        if(tag[i]=='Y')        printf("%d,%d\n",s[i][0],s[i][1]);        else printf("No!");        }}
我的代码如下(在线测试有误):

鸡兔同笼
Description
这个问题,是我国古代著名趣题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:“今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。求笼中各有几只鸡和兔?
  2*35得70 94-70得24 24/2=12 35-12得23
古代解法
  解答思路是这样的:假如砍去每只鸡、每只兔一半的脚,则每只鸡就变成了“独脚鸡”,每只兔就变成了“双脚兔”。这样,
(1)鸡和兔的脚的总数就由94只变成了47只;
(2)如果笼子里有一只兔子,则脚的总数就比头的总数多1。
因此,脚的总只数47与总头数35的差,就是兔子的只数,即 47-35=12(只)。显然,鸡的只数就是35-12=23(只)了。
  用方程也可以。
  这一思路新颖而奇特,其“砍足法”也令古今中外数学家赞叹不已。这种思维方法叫化归法。化归法就是在解决问题时,先不对问题采取直接的分析,而是将题中的条件或问题进行变形,使之转化,直到最终把它归成某个已经解决的问题。
  《孙子算经》上的解法很巧妙,它是按公式:兔数 足数-头数来算的,具体计算是这样的:兔数(只),鸡数=头数-免数=35-12=23,并且书中还给出了公式的来历:把足数除以2以后,每只鸡只剩下一足,每只兔剩下两足了,减去头数,就相当于每只鸡兔再减去一只,鸡足减完了,剩下的每只兔只有一足了,此时所剩足数恰好等于兔子头数.

Input

第一行为正整数n(0< n< 100),表示有n组数据需要计算。

其后的n行,每行2个正整数,中间用空格分隔,分别表示头的数目和脚的数目。(0<=数目<=100000)

Output

每行输出兔的数目和鸡的数目,中间用半角逗号分隔。
如果没有合理解,输出No!。

Sample Input


3
35 94
6 16
2 9

Sample Output


12,23
2,4
No!




[解决办法]
考虑问题不全面
没有考虑腿数小于 2倍的头数

读书人网 >C++

热点推荐