列表

详情


BC159. 兔子的序列

描述

兔子发现了一个数字序列,于是开始研究这个序列。兔子觉得一个序列应该需要有一个命名,命名应该要与这个序列有关。由于兔子十分讨厌完全平方数,所以兔子开创了一个新的命名方式:这个序列中最大的不是完全平方数的数字就是他的名字。
现在兔子有一个序列,想要知道这个序列的名字是什么。

输入描述

第一行一个整数 n,表示序列的长度。
第二行有 n 个整数 ai,表示序列中的 n 个数分别是多少。

输出描述

输出仅一行,表示这个序列的名字,也就是这个序列中最大的非完全平方数。

示例1

输入:

2
4 2

输出:

2

示例2

输入:

8
1 576 2 8 32 64 4 16

输出:

32

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 288KB, 提交时间: 2022-06-17

#include <stdio.h>
#include <math.h>

int main(){
    int max = -1, len, n; 
    scanf("%d", &len);
    for(int i = 0; i < len; i++){
        scanf("%d", &n);
        max = (pow((int)sqrt(n), 2) != n) && max < n? n : max;
    }
    printf("%d", max);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2022-05-03

#include<stdio.h>
#include<math.h>

int main()
{
    int n = 0;
    int m = 0;
    int max = 0;
    scanf("%d",&n);
    for(int i = 1;i<=n;i++){
        scanf("%d",&m);
        int a =(int)sqrt(m);
        if(m==(int)pow(a,2)){
            continue;
        }
        else{
            if(max<m){
                max = m;
            }
        }
    }
    printf("%d",max);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2022-03-25

#include <stdio.h>
#include <math.h>
int name(int a){
    int b=sqrt(a);
    if(a==b*b)
        return 0;
    else return a;
}

int main(){
    int n,m,max=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d ",&m);
        if(max<name(m))
            max=name(m);
    }
    printf("%d",max);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2022-06-23

int main()
{
    int n;
    scanf("%d",&n);
    int a,x;
    int max=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a);
        x=sqrt(a);
        if(x*x==a)continue;
        else if(a>max)max=a;
    }
    
    printf("%d",max);
    
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2022-06-25

#include<stdio.h>
int a[40];
int check(int x)
{
    for(int i=0;i<=39;i++)
    {
        if(x==a[i])
            return 1;
    }
    return 0;
}
int main()
{
    for(int i=0;i<40;i++)
        a[i]=(i+1)*(i+1);
    int n;
    scanf("%d",&n);
    int b[1000];
    for(int i=0;i<n;i++)
        scanf("%d",&b[i]);
    for(int i=0;i<n;i++)
    {
        if(check(b[i])==1)
            b[i]=0;
    }
    int max=b[0];
    for(int i=0;i<n;i++)
    {
        if(b[i]>max)
            max=b[i];
    }
    printf("%d",max);
    return 0;
}

上一题