求助C语言
描述给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么<x,y>组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合A={2,3,4},则...
描述
给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么<x,y>组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合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
可以追加悬赏分,只求最佳答案 展开
给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么<x,y>组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合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
可以追加悬赏分,只求最佳答案 展开
2个回答
展开全部
#include    <stdio.h> 
#include    <stdlib.h> 
#include    <math.h> 
int    comp(const    void    *a,const    void    *b)     
{     
        return    *(int    *)a    -    *(int    *)b;     
}     
int    main() 
{ 
        int    num,    i,    sum,    l,    *a; 
        while    (    scanf("%d",&num)    ==    1  &&  num  ) 
        { 
                a    =    (int    *)    malloc    (sizeof(int)    *    num); 
                for    (    i    =0;    i    <    num;    scanf("%d",&a[i++])    ); 
                qsort    (    a,    num,    sizeof(int),    comp); 
                for    (    sum    =    0,    i    =    num    -    1;    i    >=    0;    --i) 
                { 
                        for    (    l    =    0;    l    <    i;    l++) 
                                if    (    sqrt    (a[i])    ==    a[l]    )    {    sum++;    break;    } 
                } 
                printf("%d\n",sum); 
                free(a); 
        } 
        return    0; 
} 
#include    <stdlib.h> 
#include    <math.h> 
int    comp(const    void    *a,const    void    *b)     
{     
        return    *(int    *)a    -    *(int    *)b;     
}     
int    main() 
{ 
        int    num,    i,    sum,    l,    *a; 
        while    (    scanf("%d",&num)    ==    1  &&  num  ) 
        { 
                a    =    (int    *)    malloc    (sizeof(int)    *    num); 
                for    (    i    =0;    i    <    num;    scanf("%d",&a[i++])    ); 
                qsort    (    a,    num,    sizeof(int),    comp); 
                for    (    sum    =    0,    i    =    num    -    1;    i    >=    0;    --i) 
                { 
                        for    (    l    =    0;    l    <    i;    l++) 
                                if    (    sqrt    (a[i])    ==    a[l]    )    {    sum++;    break;    } 
                } 
                printf("%d\n",sum); 
                free(a); 
        } 
        return    0; 
} 
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询