3251 - 毕达哥拉斯的证明

    《周髀算经》是中国最早的一部数学著作,其中有这样一个故事。周公问:“窃闻乎大夫善数也,请问古者包牺立周天历度。夫天不可阶而升,地不可得尺寸而度,请问数安从出?”商高答:“数之法出于圆方,圆出于方,方出于矩,矩出九九八十一,故折矩以为勾广三,股修四,径隅五。既方其外,半之一矩,环而共盘。得成三、四、五,两矩共长二十有五,是谓积矩。故禹之所以治天下者,此数之所由生也。”从上面所引的这段对话中,我们可以清楚地看到,我国古代的人民早在几千年以前就已经发现并应用勾股定理这一重要懂得数学原理了。

    在西方有文字记载的最早的证明是毕达哥拉斯给出的。据说当他证明了勾股定理以后,欣喜若狂,杀牛百头,以示庆贺。故西方亦称勾股定理为“百牛定理”。

<br />

&nbsp; &nbsp; 图示正方形是由1个边长为a的正方形和1个边长为b的正方形以及4个直角边分别为a、b,斜边为c的直角三角形拼成的。右边的正方形是由1个边长为c的正方形和4个直角边分别为a、b,斜边为c的直角三角形拼成的。因为这两个正方形的面积相等(边长都是a+b),所以可以列出等式<img align="absmiddle" class="editorImg  log-set-param" alt="" title="" height="35" width="216" src="http://e.hiphotos.baidu.com/baike/s%3D216/sign=a783463e4836acaf5de091fd4ad88d03/35a85edf8db1cb1325383914de54564e92584b67.jpg" /><span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;">&nbsp;,化简得</span><img align="absmiddle" class="editorImg  log-set-param" alt="" title="" height="16" width="80" src="http://b.hiphotos.baidu.com/baike/s%3D80/sign=37f099960c2442a7aa0ef0a5d04342f7/730e0cf3d7ca7bcba3e7643abd096b63f624a803.jpg" />。

题目输入

输入数据第一行为测试数据的组数n,后面n组数据每行包括4个用空格分隔的字符串,其中A、B、C分别代表勾股定理的a、b、c三条边,a和b为直角边,字符后紧跟的数据为对应边的长度,大小不超过10000的整数。

题目输出

输出数据为勾股定理的三条边及对应的长度数值,各个数据之间用空格分隔,用n行输出。

输入/输出样例

题目输入

2
A 3 B 4
A 5 B 12

题目输出

A 3 B 4 C 5
A 5 B 12 C 13

C语言解答

#include "math.h"
int main(int argc, char* argv[])
{
	int n,a,b,c;
	  char str[2],str1[2];
	  scanf("%d",&n);
	 while(n--)
	 {
		  scanf("%s%d%s%d",str,&a,str1,&b);
	        if(str[0]=='A')
			{
			   if(str1[0]=='B')
			   {
			      c=sqrt((a*a+b*b));
				    printf("A %d B %d C %d\n",a,b,c);
			   }
			   else
			   {
			       c=sqrt((b*b-a*a));
				    printf("A %d B %d C %d\n",a,c,b);
			   }
			}
			if(str[0]=='B')
			{
			   if(str1[0]=='A')
			   {
			      c=sqrt((a*a+b*b));
				    printf("A %d B %d C %d\n",b,a,c);
			   }
			   else
			   {
			       c=sqrt((b*b-a*a));
				    printf("A %d B %d C %d\n",c,a,b);
			   }
			}
			if(str[0]=='C')
			{
			   if(str1[0]=='A')
			   {
			      c=sqrt((a*a-b*b));
				    printf("A %d B %d C %d\n",b,c,a);
			   }
			   else
			   {
			       c=sqrt((a*a-b*b));
				    printf("A %d B %d C %d\n",c,b,a);
			   }
			}
	 }
	
	return 0;
}

C++解答

#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
int T,n,m;
char a,b,c;
 cin>>T;
 while(T--)
 {
	 int x,y;
   cin>>a>>n>>b>>m;
   if(a=='C')
   {
   x=sqrt(n*n-m*m);
   if(b=='A')
	   printf("A %d B %d C %d\n",m,x,n);
   else
	   printf("A %d B %d C %d\n",x,m,n);
   }
   else if(b=='C')
   {
   x=sqrt(m*m-n*n);
   if(a=='A')
   cout<<a<<" "<<n<<" "<<"B "<<x<<" "<<b<<" "<<m<<endl;
   else
     printf("A %d B %d C %d\n",x,n,m);	 
   }
   else
   {
   x=sqrt(n*n+m*m);
   cout<<a<<" "<<n<<" "<<b<<" "<<m<<" "<<"C "<<x<<endl;
   }
 }
return 0;
}
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题