湘大 XTU OJ 1054 平方数 题解:数据范围比较小->双层循环、朴素遍历 c语言不能使用const修饰的变量 int的数据范围是:-2147483648 - 2147483647

一、链接

1054 平方数

二、题目

描述

       给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合A={2,3,4},则只有4=2*2,则答案为1。

输入

       每个样例占2行,第一行为一个非负整数n,n<=1000,为集合中元素的个数,如果n为0则输入结束。第二行为n个整数,为集合的元素,所有的元素为非负整数,且<=100,000,000,两个整数之间有一个空格隔开。

输出

       每行输出一个样例的结果。

Sample Input

3
2 3 4
5
3 36 5 9 6
0

Sample Output

1
2

三、题意

输出有多少个符合条件的数对,符合条件指的是:一个数等于另一个数的平方

四、代码

c++代码

#include

using namespace std;

const int N=1e3+10;

long long a[N];

int main()
{
	int n;
	while(scanf("%d",&n),n!=0)
	{
		for(int i=0;i

c语言代码

#include

long long q[1000+10];

int main()
{
	int n;
	while(scanf("%d",&n),n!=0)
	{
		for(int i=0;i

 

五、总结

1.c++转到c语言出现奇怪的报错

const int N=1e3+10;

long long q[N];

[错误] variably modified 'q' at file scope 

原因是c++可以用const修饰的变量 ,但是c语言不能用const修饰的变量

 2.双层循环遍历数组元素寻找答案,注意到数组元素只有1000个,双层循环是6个0,还是在可以接受的时间复杂度之内

3.每一个数组元素的数据范围是8个0,乘积可能会溢出int的范围,所以使用long long 数组来存储数据,

int的数据范围是

-2^31 ~ 2^31-1,即:-2147483648 - 2147483647

4.找到了符合条件的数对就把计数器加一(属于非常常规的操作了)

六、精美图片

湘大 XTU OJ 1054 平方数 题解:数据范围比较小->双层循环、朴素遍历 c语言不能使用const修饰的变量 int的数据范围是:-2147483648 - 2147483647_第1张图片

 

你可能感兴趣的:(算法竞赛,湘大,XTU,OJ,算法,数据结构)