leetcode-279. 完全平方数

1. 题目链接

链接: 题目链接

2. 解答

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool issquare(int n)
{
    if (n == 1 || n == 4) return true;
    if (n == 2 || n == 3) return false;

    for (int i = 3; i < n/2; i++ ) {
        if (n == i*i) return true;
    }

    return false;

}

int solve(int num)
{
    int *num_square = malloc(sizeof(int) * num);
    int square_len = 0;
    int count = 0;

    for (int i = 0; i < num; i++) {
    	//计算所有完全平方数,完全平方数从小到大排序
        if (issquare(i) == true) {
            num_square[square_len] = i;
            square_len++;
            printf("squre[%d]=%d, ", square_len, num_square[square_len]);
        }
    }

    printf("\n");
	//循环从大向小循环,因为找最少的和
    for (int i = square_len - 1; i >= 0;) {
    	//如果输入与完全平方数相同,那么结束循环,并记录此数据
        if (num == num_square[i]) {
            count++;
            printf("%d ", num_square[i]);
            break;
        } else if (num > num_square[i]) { //如果输入大于完全平方数,记录完全平方数,继续循环
            num = num - num_square[i];
            count++;
            printf("%d ", num_square[i]);
        } else {//如果输入小于完全平方数,那么找更小的完全平方数
            i--;
        }
    }

    free(num_square);

    printf("\n");

    return count;
}

int main()
{
    int num = 0;
    scanf("%d", &num);
    printf("input is:%d\n", num);

    int result = solve(num);
    printf("result:%d\n", result);

    return 0;

}
相关推荐
NAGNIP11 分钟前
面试官:正则化都有哪些经典的方法?
算法·面试
Theodore_102233 分钟前
深度学习(12)正则化线性回归中的偏差与方差调试
人工智能·深度学习·算法·机器学习·线性回归
m0_569881471 小时前
跨语言调用C++接口
开发语言·c++·算法
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #295:数据流的中位数(双堆法、有序列表、平衡树等多种实现方案详解)
算法·leetcode·优先队列··数据流·中位数·java 面试题
x_xbx1 小时前
LeetCode:215. 数组中的第K个最大元素
数据结构·算法·leetcode
黎阳之光1 小时前
AI数智筑防线 绿色科技启新篇——黎阳之光硬核技术赋能生态安全双升级
大数据·人工智能·算法·安全·数字孪生
2501_924952692 小时前
C++中的过滤器模式
开发语言·c++·算法
2401_873204652 小时前
C++中的组合模式实战
开发语言·c++·算法
西野.xuan2 小时前
内存布局(堆vs栈)一篇详解!!
java·数据结构·算法
2401_831824962 小时前
高性能压缩库实现
开发语言·c++·算法