18-语言入门-18-鸡兔同笼

题目地址:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=64

?

描述
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。

输入
第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)
a行里,每行都有一个n和m.(0<m,n<100)
输出
输出鸡兔的个数,或者No answer
样例输入
2
14 32
10 16
样例输出
12 2
No answer

?

?

代码:

#include <stdio.h>

//输出结果
//n-个数和,m-腿数和
static void printResult(int n,int m);

int main()
{
???? int readLen = 0;
???? scanf("%d",&readLen);
???? getchar();
????
???? while(readLen > 0)
???? {
????????? int n = 0;
????????? int m = 0;
?????????
????????? scanf("%d %d",&n,&m);
????????? getchar();
?????????
????????? printResult(n,m);
?????????
????????? --readLen;
???? }
????
???? return 0;
}

//输出结果
//n-个数和,m-腿数和
static void printResult(int n,int m)

{

? ? ?if(m<n)

? ? ?{

? ? ? ? ? printf("No answer");

????????? return;

? ? ?}

?

???? int tmpValue = m-2*n;
???? if(tmpValue < 0 || tmpValue % 2 != 0)
???? {
????????? printf("No answer");
????????? return;
???? }
????
???? int rabbitCount = tmpValue / 2;

???? int chickenCount = n - rabbitCount;

?

? ? if(chickenCount < 0)

? ? {

? ? ? ? ? printf("No answer");

????????? return;

? ? }

????
???? printf("%d %d\n",chickenCount,rabbitCount);
}

?

?

通过方程组,解得个数的判断

兔子:(m-2n)/2

鸡:n-兔子个数

?

另外自己写的代码对条件的判断过于繁琐,推荐优秀程序如下:

?

#include<iostream>

using namespace std;

int main()

{

int n,a,b,p,q;

cin>>n;

while(n--)

{

cin>>a>>b;

q=(b-2*a)/2;

p=a-q;

if(p<0 ||q<0 || b%2) cout<<"No answer"<<endl;

else cout<<p<<" "<<q<<endl;

}

}

?

时间: 2024-11-03 06:54:22

18-语言入门-18-鸡兔同笼的相关文章

C/C++算法竞赛入门经典Page9 例题1-4 鸡兔同笼

题目:鸡和兔总数:n,总腿数:m.输入n,m,输出鸡和兔分别的数量;无解则输出"No answer" 样例输出1: 14 32 样例输出1: 12 2 样例输入2: 10 16 样例输出2: No answer 首先,声明两个变量n,m对应总数和总腿数;再声明两个变量为鸡和兔各自的数量a,b 1 int n,m,a,b; 输入n,m: scanf("%d%d",&n,&m); 通过联立方程组: a+b=n 2a+4b=m 得: a=(4n-m)/2;

Open Judge 2750 鸡兔同笼

2750:鸡兔同笼                                                                                                   总时间限制:1000ms                                                                                                   内存限制:65536kB 描述 一个笼子里面关了鸡和兔子(鸡有

鸡兔同笼问题、百鸡问题、辗转相除法求最大公约数

一.鸡兔同笼 鸡和兔子35只,腿一共有94条,求出鸡和兔子的数量各是多少?(鸡的数目是23,兔子的数目是12) $n = 0; for($ i=1;$i<35;$i++){ $n ++; //n=34; $ j=35-i; if(i*2+j*4==94){ printf("鸡的数目是%d只, 兔子的数目是%d只",$i,$j); } } 此时,循环进行了34次.但是,有些循环是无意义的,因为得到了结果,循环还在继续往下执行.我们知道:两个未知数,两个方程,其方程组的解唯一!那么我

Linux脚本基础篇-鸡兔同笼问题

概述 鸡兔同笼,是古代著名典型趣题之一,记载于<孙子算经>之中,题目为"有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚.问笼中各有多少只鸡和兔?".鸡兔同笼问题,是小学奥数的常见题型,也是计算机编程算法中常见的一道题,现阶段开始shell脚本的学习,因此不妨用脚本来尝试编写一个计算该问题的脚本,加深自己对Linux shell脚本的理解. 算法 在做一道数学题之前,思路是极为重要的,自己如何解决这道题,怎么按照计算机语言的思维来帮助我们计算就成为了首

鸡兔同笼

鸡兔同笼 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 已知鸡和兔的总数量为n,总腿数为m.输入n和m,依次输出鸡和兔的数目,如果无解,则输出"No answer"(不要引号). 输入 第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10) a行里,每行都有一个n和m.(0<m,n<100) 输出 输出鸡兔的个数,或者No answer 样例输入 2 14 32 10 16 样例输出 12 2 No answer #inc

java求鸡兔同笼问题

import java.util.Scanner; public class jitutonglong { static int j,t; public static int qiongju(int head,int foot) { int re,x,y; re=0; for(x=0;x<=head;x++) { y=head-x; if(x*2+y*4==foot) { re=1; j=x; t=y; } } return re; } public static void main(Strin

1109: 零起点学算法16——鸡兔同笼

1109: 零起点学算法16--鸡兔同笼 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 4456  Accepted: 1355[Submit][Status][Web Board] Description 鸡和兔关在同一笼子中,已知总数量n和腿的总数量m,求鸡的数量和兔的数量. Input 输入2个整数分别是n和m(多组测试数据) Output 输出鸡的数量和兔的数量,中间用空格隔开,如果无解则

鸡兔同笼问题多解

还记得有一期跑男里有过一道关于鸡兔同笼的问题,说鸡兔同笼,一共有35个头,94条腿,问鸡有多少只?兔有多少只? 今天突发奇想的想用最近学的java知识做一下这道题,当然,题的结果我是笔算出来的,为了印证输出的正确与否,不多说了,直接上码: 其实从前后顺序看会发现,代码越来越简单,最后甚至都放弃使用循环来完成,完全变成了一个数学公式,但当时自己刚做的时候,我足足死扣了两个小时才清楚了思路,再之后的几个就比较轻松地做出来了. 思路很重要,想要自主完成一个东西一定要有清晰的思路,这只是个非常简单的题目

java-第六章-for-解决鸡兔同笼问题

public class A01 { public static void main(String[] args) { // TODO Auto-generated method stub for (int i = 0; i < 35; i++) { int Rabbit = 35 - i; if (i * 2 + Rabbit * 4 == 94) { System.out.println("鸡:"+i + "\t兔子" + Rabbit); } } } }

(c语法百题37)鸡兔同笼

内容: 鸡兔同笼中头的总数,脚的总数,求鸡兔各多少只 输入说明: 一行两个整数分别表示头.脚总数(保证有解,当然有可能解为0) 输出说明: 一行两个整数,分别表示鸡.兔的只数 输入样例: 若题目没有特别说明,则应该以多组测试数据方式读取,或者参考a001. 20 40 输出样例 : 20 0 #include <stdio.h> int main() { int a,b,x,y; scanf("%d%d",&x,&y); for (a=0;a<1000