首页 > 试题广场 >

兔子的序列

[编程题]兔子的序列
  • 热度指数:5931 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
兔子发现了一个数字序列,于是开始研究这个序列。兔子觉得一个序列应该需要有一个命名,命名应该要与这个序列有关。由于兔子十分讨厌完全平方数,所以兔子开创了一个新的命名方式:这个序列中最大的不是完全平方数的数字就是他的名字。
现在兔子有一个序列,想要知道这个序列的名字是什么。

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


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

输入

2
4 2

输出

2
示例2

输入

8
1 576 2 8 32 64 4 16

输出

32

备注:
对于 50%的数据 
n = 1
对于 100%的数据 
1≤ n ≤ 1000,1 ≤ ai ≤ 1000
数据保证至少有一个非完全平方数
#include<stdio.h>
#include<math.h>
int main() {
    int n = 0, input = 0, max_ret = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &input);
        if (input != pow((int)sqrt(input), 2) && input > max_ret)
                max_ret = input;
    }
    printf("%d\n", max_ret);
    return 0;
}

发表于 2022-08-11 17:03:27 回复(0)
#include<iostream>
#include<cmath>
using namespace std;

int main() {
    int n, res = 0;
    cin >> n;
    while (cin >> n) {
        if (pow((int)sqrt(n), 2) != n)
            res = res > n ? res : n;
    }
    cout << res;
    return 0;
}

发表于 2022-04-01 21:25:50 回复(0)
#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;
}

发表于 2022-06-16 21:23:10 回复(0)
#include <stdio.h>
#include <math.h>
#include<stdlib.h>

int issqrt(int num){
int res=(int)sqrt(num);
return num==res*res;
}
int main() {
int n = 0;
scanf("%d", &n);
//动态分配内存
int *arr=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);}
int max=arr[0];
for(int i=0;i<n;i++){
if(!issqrt(arr[i]))
{
if(max<arr[i]){
max=arr[i];}
}
}
printf("%d\n",max);
free(arr);
return 0;
}
发表于 2024-10-31 23:56:28 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++)
            arr[i]=sc.nextInt();
        Arrays.sort(arr);
        int len=arr.length;
        for(int i=len-1;i>=0;i--){
            int x=(int)Math.sqrt(arr[i]);
            if(x*x!=arr[i]){
                System.out.print(arr[i]);
                break;
            }
        }
    }
}

发表于 2022-08-12 22:54:44 回复(0)
#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool issquare(int x)
{
    int a = (int)sqrt(x);
    if(x == a * a)
    return true;
    return false;
}

int main() {
    int a, max = 0;
    scanf("%d", &a);
    int arr[a];
    for(int i = 0; i < a; i++)
    {
        scanf("%d", arr + i);
        if(!issquare(arr[i]) && arr[i] > max)
        max = arr[i];
    }
    printf("%d\n", max);
    return 0;
}
发表于 2025-05-12 01:57:31 回复(0)
#include <iostream>
#include <cmath>
using namespace std;

// 判断一个数是否是完全平方数
bool isPerfectSquare(int num) {
    if (num < 0) return false;
    int root = (int)sqrt(num);
    return root * root == num;
}

// 找到数组中最大的非完全平方数
int MaxNoPerfectSquare(int arr[], int n) {
    int maxNum = -1; // 初始化为-1,表示未找到非完全平方数
    for (int i = 0; i < n; i++) {
        if (!isPerfectSquare(arr[i]) && arr[i] > maxNum) {
            maxNum = arr[i];
        }
    }
    return maxNum;
}

int main() {
    int n;
    cin >> n;
    int* arr = new int[n];
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    int result = MaxNoPerfectSquare(arr, n);
    cout << result << endl;
    delete[] arr; // 释放动态分配的内存
    return 0;
}

发表于 2025-03-23 16:07:04 回复(0)
#include<stdio.h>
#include<math.h>
int Max_sqrt(int a)
{  
    int i = 0;
    int input = 0;
    int max = 0;
    int vale = 0;
    for(i=0;i<a;i++)
    {
        scanf("%d ",&input);
        vale = (int)sqrt(input);
        if(vale * vale != input && input > max)
        {
            max = input;
        }
    }
    return max;
}
int main()
{
    int a = 0;
    scanf("%d\n",&a);
    int ret = Max_sqrt(a);
    printf("%d",ret);
    return 0;
}

发表于 2024-12-24 15:21:31 回复(0)
以为自己写的还好,看了一下大家的感觉还得练(捂脸)

#include <stdio.h>
#include <math.h>
int main() {

    int a,b[1000];

    scanf("%d",&a);
    for (int x=0; x<a; x++) {
        scanf("%d",&b[x]);

    }

    //判断数组中每个数是否能开平方,不能则记入在数组中并获得这个数组最后一个元素的下标
    int shi=0,sum[1000],i=0;
    for (int x=0; x<a; x++) {
        for (int y=0; y<b[x]; y++) {//从0的平方到(元素-1)平方依次对比是否与元素相等
            if (pow(y, 2)==b[x]) {
                shi=1;
                break;
            }
        }
        if (shi==0) {       //无法开根的数记入下来
            sum[i]=b[x];
            i++;
        }
        shi=0;
    }
    i--;

    //将数组中的元素转换成从小到大的顺序
    int zhongzhuan=0,tou=0;
        for (int x=0; x<=i; x++) {
            tou=0;
            for (int y=1; y<=i; y++) {

                if (sum[tou]>sum[tou+1]) {
                    zhongzhuan=sum[tou];
                    sum[tou]=sum[tou+1];
                    sum[tou+1]=zhongzhuan;
                }
                tou++;

            }
        }

        printf("%d",sum[i]);

    return 0;
}


发表于 2024-10-31 21:15:39 回复(0)
n = eval(input())
arr = list(map(int,input().split()))
arr.sort(reverse=True)
for i in arr:
    if pow(i,0.5)%1 != 0:
        print(i)
        break

发表于 2024-09-27 17:08:49 回复(0)
#include <stdio.h>
#include<math.h>

int Incomplete_square_number(int* p,int n)
{
	int i = 0;
	double drr[1000] = { 0 };
	int ret = 0;
	for (i = 0; i < n; i++)
	{
		int sum = sqrt(*(p + i));
		if (sum*sum!=*(p+i))
		{
			drr[ret] = *(p + i);
		}
		ret++;
	}
	double Max = drr[0];
	for (i = 0; i < ret; i++)
	{
		if (drr[i] > Max)
		{
			Max = drr[i];
		}
	}
	return Max;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[1000] = { 0 };
	int i=0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	int max_Incomplete_square_number =Incomplete_square_number(arr,n);
	printf("%d", max_Incomplete_square_number);
	return 0;
}

发表于 2024-09-06 11:20:20 回复(0)
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

//判断释放是完全平方数
bool IsPerfectSquare(int n)
{
    double a = sqrt(n);
    //b必须是double型,比较的时候会类型转换
    double b = (int)sqrt(n);
    if(a == b)
        return true;
    
    return false;
}

int Traverse()
{
    int n;
    scanf("%d", &n);

    int* a = malloc(sizeof(int) * n);
    int i = 0;
    while (i < n) 
    {
        scanf("%d", &a[i]);
        i++;
    }

    int MAX = a[0];
    for(int i = 0; i < n; i++)
    {
        if(!IsPerfectSquare(a[i]) && MAX > a[i])
            MAX = a[i];
    }

    free(a);
    return MAX;
}

int main() 
{

    int r = Traverse();
    printf("%d\n", r);

    return 0;
}

发表于 2024-07-17 03:49:03 回复(0)
#include <stdio.h>
#include <math.h>
#define MAX 1000

int find_name(int n, int *num){
    int temp[n];
    int count = 0;
    //如果一个数开方后的乘积还是原来的数,那么这个数就是完全平方数
    for (int i = 0; i < n; i++) {
        int root = sqrt(num[i]);
        if (root * root != num[i]){
            temp[count++] = num[i];
        }
    }
    //取最大值
    int max = temp[0];
    for (int i = 1; i < count; i++) {
        if (max < temp[i]){
            int tmp = max;
            max = temp[i];
            temp[i] = tmp;
        }
    }
    return max;
}

int main() {
    int n;
    int num[MAX];
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        scanf("\n%d",&num[i]);
    }
    int ret = find_name(n, num);
    printf("%d",ret);
    return 0;
}
//
// Created by Wilbur Lee on 14/7/2024.
//

发表于 2024-07-14 20:38:41 回复(0)
#include <cmath>
#include <iostream>
using namespace std;

int main() {
    int a;
    int arry[1000] = {0};
    cin >> a;
    int max = 0;
    for (int i = 0; i < a; i++) 
    {
        cin >> arry[i];
        if (pow((int)sqrt(arry[i]),2) != arry[i]) 
        {
            if (arry[i] > max) 
            {
                max = arry[i];
            }
        }
    }
    cout << max << endl;
}

发表于 2024-05-11 20:17:02 回复(0)
#include<stdio.h>
#include<math.h>


int main()
{
    int n,a;
    scanf("%d",&n);
    int x;
    int maxf=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&x);
        a=sqrt(x);
        if(pow(a,2)!=x&&x>maxf)
        {
             maxf=x;
        }
    }
    printf("%d",maxf);
    return 0;
}

编辑于 2024-04-09 19:56:53 回复(0)
#include <stdio.h>
#include <math.h>

// 判断一个数是否为完全平方数
int is(int num)
 {
    int s = (int)sqrt(num);
    return (s * s == num);
}

int main() 
{
    int n = 0;
    scanf("%d", &n);

    int se[1000] = {0};
    for (int i = 0; i < n; i++) 
    {
        scanf("%d", &se[i]);
    }

    int max = -1; // 初始化为-1,因为序列中的数可能为非负数
    for (int i = 0; i < n; i++) 
    {
        if (!is(se[i]) && se[i] > max) 
        {
            max = se[i];
        }
    }

    printf("%d\n", max); // 输出这个序列的名字,即最大的非完全平方数
    return 0;
}

编辑于 2024-03-17 20:09:04 回复(0)
最笨的做法
#include <stdio.h>
#include <math.h>
//找出 最大数de下标
void max(int n, int arr[], int* m) {
    int i = 0, max = 0;
    for (i = 0; i < n; i++)
        if (max < arr[i]) {
            max = arr[i];
            *m = i;
        }
}

//判断是否是完全平方数
int fun(int m) {
    int i = 0;
    for (i = 0; i <= sqrt(1000); i++) {
        if (pow(i, 2) == m)return 0;
    }
    return 1;
}

int main() {
    //初始化数据
    int n = 0, arr[1000], i;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int m = 0;
    max(n, arr, &m); //找出 最大数de下标
   
        while (1) {
            if (fun(arr[m])) break;//判断是否是完全平方数
            else arr[m] = 0;        //让最大数但是完全平方数变为0;
        }
        //输出
        printf("%d", arr[m]);

    return 0;
}


编辑于 2024-02-23 22:25:55 回复(0)
列表排序reverse=True,逐一排查
n = int(input())
a = list(map(int,input().split()))

a.sort(reverse=True)
for i in a:
    if i**0.5 != int(i**0.5):
        print(i)
        break


发表于 2024-02-14 18:19:18 回复(0)
#include<stdio.h>
#include <math.h>
int  main()
{
    int n=0;
    int arr[9999999]={0};
    scanf("%d\n",&n);
    int i=0;
    int max=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
        int a=sqrt(arr[i]);
        if(arr[i]==pow(a,2))
        {
            continue;
        }
        else 
        {
        if(arr[i]>max)
        {
            max=arr[i];
        }
        }
        
    }
printf("%d",max);

}
//快都看我的代码


发表于 2023-12-29 19:58:26 回复(0)
#include<stdio.h>
#include<math.h>
int is_unsqrt(int x)
{
    int tmp = 0;
    tmp = sqrt(x);  //开平方再取整数值
    if (pow(tmp, 2) != x) //整数值的平方相等,若是实数转换成的整数,则和原来的数不同
        return x;
    else
        return 0;
}

int main()
{
    int n = 0,m=0,max=0;
    scanf("%d", &n);

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

    return 0;
}
发表于 2023-12-08 10:15:34 回复(0)

问题信息

难度:
48条回答 2284浏览

热门推荐

通过挑战的用户

查看代码
兔子的序列