2862--勾股定理

2024-08-25 01:38
文章标签 勾股定理 2862

本文主要是介绍2862--勾股定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

勾股定理

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给N个数,判断这N个数中存在多少组勾股数(勾股数:存在三个数满足a*a + b*b = c*c)。

输入

第一行输入一个数T(1<=T<=50),表示有T组数据。
每组数据输入一个N(1<=N<=1000)。
接下来N个数ai(1<=ai<=10^9)。

输出

每组数据输出一行,表示有多少组勾股数。

示例输入

3
4
4 3 5 3
4 
6 7 8 10
5
6 7 8 9 5

示例输出

2
1
0

提示

来源

枚举两边,对第三遍做二分查找

示例程序

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
long long int p[2000] ;
int num[2000] ;
int main()
{
    int t , i , j , n , l , ans ;
    long long int k ;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        for(i = 0 ; i < n ; i++)
        {
            scanf("%lld", &p[i]);
            p[i] *= p[i] ;
        }
        sort(p,p+n);
        /*for(i = 0 ; i < n ; i++)
            printf("%lld ", p[i]);
        printf("\n");*/
        memset(num,0,sizeof(num));
        k = -1 ;
        l = 0 ;
        for(i = 0 ; i < n ; i++)
        {
            if(p[i] != k)
            {
                num[i] = 1 ;
                l = i ;
                k = p[i] ;
            }
            else
                num[l]++ ;
        }
        k = -1 ;
        for(i = 0 ; i < n ; i++)
            if(num[i] == 0)
                num[i] = k ;
            else
                k = num[i] ;
        /*for(i = 0 ; i < n ; i++)
            printf("%d ", num[i]);
        printf("\n");*/
        ans = 0 ;
        for(i = 0 ; i < n ; i++)
        {
            for(j = i+1 ; j < n ; j++)
            {
                k = p[i]+ p[j] ;
                int low = 0 , mid , high = n-1 ;
                while(low <= high)
                {
                    mid = (low + high) / 2 ;
                    if( p[mid] == k )
                        break;
                    else if( p[mid] < k )
                        low = mid + 1 ;
                    else
                        high = mid - 1 ;
                }
                if(p[mid] == k)
                    ans++ ;
            }
        }
        printf("%d\n", ans);
    }
}

这篇关于2862--勾股定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104192

相关文章

勾股定理、三角函数、弧度在游戏中的运用

勾股定理 若知道直角三角形的任意两条边长,则可以求出第三条边的长度。 公式 :a²+b²=c² 这里的c一定是斜边 例1:   求斜边 解 : 3²+4²=c² c = 9 + 16 C = 25 例2:   求直角边 解: a²+4²=6² a² = 36 - 16 a = 20 三角函数   sinx = 对边/斜边 即 :a / c

勾股定理(点赞支持!谢谢)

股定理是一个基本的几何定理,在中国,《周髀算经》记载了勾股定理的公式与证明,相传是在商代由商高发现,故又有称之为商高定理;三国时代的蒋铭祖对《蒋铭祖算经》内的勾股定理作出了详细注释,又给出了另外一个证明。直角三角形两直角边(即“勾”,“股”)边长平方和等于斜边(即“弦”)边长的平方。也就是说,设直角三角形两直角边为a和b,斜边为c,那么a²+b²=c²。勾股定理现发现约有400种证明方法,是数学定

知乎热议:拿爱因斯坦相对论证明勾股定理,网友:我裂开了

公众号关注 “GitHubDaily” 设为 “星标”,带你了解技术圈内新鲜事! 相对论也没想到,自己有生之年还可以被拿来证明勾股定理。 勾股定理是什么,人人都知道: 在平面上的一个直角三角形中,两个直角边边长的平方加起来等于斜边长的平方。 如果设直角三角形的两条直角边长度分别是 a 和 b,斜边长度是 c,那么可以用数学语言表达为「a²+b²=c²」。 勾股定理是数学定理中证明方法最多

【路径规划】基于matlab社会搜索算法栅格地图机器人路径规划【含Matlab源码 2862期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划(Matlab) 神经网络预测与分类(Matlab) 优化求解(Matlab) 语音处理(Matlab

爱因斯坦相对论证明勾股定理,人教版数学教材引围观,网友:我裂开了

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 相对论也没想到,自己有生之年还可以被拿来证明勾股定理。 勾股定理是什么,人人都知道: 在平面上的一个直角三角形中,两个直角边边长的平方加起来等于斜边长的平方。 如果设直角三角形的两条直角边长度分别是 a 和 b,斜边长度是 c,那么可以用数学语言表达为「a²+b²=c²」。 勾股定理是数学定理中证明方法最多的定理之一,现存几百种

综合练习2 勾股定理

综合练习2 勾股定理 找出1~100中都有哪些数符合勾股定理。例如:3、4、5。 方法一 /*综合练习2 勾股定理* 找出1~100中都有哪些数符合勾股定理。例如:3、4、5。* */package cylk;public class Zhlx2 {public static int pf(int a) {return a*a;}public static void main(String[]

变异的勾股定理

设直角三角形的两条直角边长度分别是 和a,b斜边长度是c,那么可以用数学语言表达:a​2​​+b​2​​=c​2​​,这就是勾股定理,但是在本题中, 勾股定理它!变!异!了!,若三个数满足a​2​​+b​2​​=c,那么称该数满足变异的勾股定理, 现在给定一个数c,如果存在两个数a与b满足a​2​​+b​2​​=c,那么输出Yes,否则输出No. 数据范围: c<=2​31​​−1 输