1.//描述
//兔子发现了一个数字序列,于是开始研究这个序列。兔子觉得一个序列应该需要有一个命名,
// 命名应该要与这个序列有关。由于兔子十分讨厌完全平方数,
// 所以兔子开创了一个新的命名方式:这个序列中最大的不是完全平方数的数字就是他的名字。
//现在兔子有一个序列,想要知道这个序列的名字是什么。
//输入描述:
//第一行一个整数 n,表示序列的长度。
//第二行有 n 个整数 ai,表示序列中的 n 个数分别是多少。
//输出描述:
//输出仅一行,表示这个序列的名字,也就是这个序列中最大的非完全平方数。
2.方法一:我们要知道非完全平方数是什么,非完全平方数是指是否有相等的数相乘(b*b==arr[i]),(注意:一定b<arr[i]/2)。当有是则count++,否则count==0.
#include<stdio.h>
//方法一
int main()
{int n = 0;int a = 0;scanf_s("%d", &n);int arr[1001] = { 0 };int tmp = 0;for (int i = 0; i < n; i++){scanf_s("%d", &arr[i]);}for (int j = 0; j < n; j++){int count = 0;for (int b = 1; b <= arr[j] / 2; b++)//肯定小于这个数的二分之一(可以加快判断速率){if (b * b == arr[j]){count = 1;break;}}if (count == 0){if (tmp < arr[j]){tmp = arr[j];}}}printf("%d\n", tmp);return 0;
}
3.方法三:先对数组元素从小到大进行排序,然后从数组末尾找,能比较快的找到最大的完全非平方数,进行比较判断是否为完全非平方数。
#include<stdio.h>
int func(int x)
{int i;for (i = 1; i <= x / 2; i++)//肯定小于这个数的二分之一(可以加快判断速率)if (i * i == x)return 0;return 1;
}
int main()
{int n=0;scanf("%d", &n);int a[n];int i, j, t;for (i = 0; i < n; i++)scanf("%d", &a[i]);for (i = 0; i < n - 1; i++){//先对数组元素从小到大进行排序for (j = 0; j < n - 1 - i; j++){if (a[j] > a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}}for (i = n - 1; i >= 0; i--){//从数组末尾找,能比较快的找到最大的完全非平方数if (func(a[i]))//判断是否为完全非平方数{printf("%d\n", a[i]);break;}}return 0;
}