勾股定理
2015-11-20 17:14
260 查看
勾股定理
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 <string.h> #include <stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int a[1010], b, ls[1010]; int f(int x, int y) { int m; while(x < y) { m = x +(y-x) /2; if(ls[m] == b) return 1; else if (ls[m] > b) y = m; else x = m+1; } return -1; } int main() { int t; while(~scanf("%d",&t)) while(t--) { int n, i, j; scanf("%d",&n); for(i = 0; i < n; i++) { scanf("%d",&a[i]); ls[i] = a[i]*a[i]; } qsort(a,n,sizeof(a[0]),cmp); qsort(ls,n,sizeof(ls[0]),cmp); int c = 0; for(i = 0; i < n; i++) { for(j = i+1; j < n; j++) { int k; b = a[i] *a[i] + a[j] *a[j]; k = f(j,n); if(k == 1) c+=k; } } printf("%d\n",c); } return 0; }
相关文章推荐
- 【转】用JMeter来测试Tomcat的性能
- C++中声明和定义的区别
- 持续集成:TestNG中case之间的关系
- 快速掌握 Android Studio 中 Gradle 的使用方法
- SAXBuilder解析applicationConfig.config配置文件
- 利用jQuery无插件创建可扩展目录树
- Srping - bean的依赖注入(Dependency injection)
- Android框架层之音频管理器AudioManager的使用
- href=”#”与javascript:;与javascript:void(0)的比较
- 过滤掉URL里不需要的参数
- NaN(Not a Number)问题
- 在线白板,基于socket.io的多人在线协作工具
- 在主Android Activity中加载Fragment的一般简易方法 ,来模拟一个微信界面。
- 【转】如何使用JMeter测试Java项目
- c++引用和指针的实现
- 深入探索C++对象模型 读书笔记
- HDU 5558 Alice's Classified Message (后缀自动机水题) 2015年合肥区域赛G题
- 使用jersey实现应用服务器和图片服务器分离
- 详解ExplosionField的使用,实现View的粉碎效果
- Collection <__NSCFDictionary: 0xc425570> was mutated while being enumerated.