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;

}
相关推荐
kyle~44 分钟前
C++---嵌套类型(Nested Types)封装与泛型的基石
开发语言·c++·算法
sali-tec1 小时前
C# 基于halcon的视觉工作流-章48-短路断路
开发语言·图像处理·人工智能·算法·计算机视觉
墨染点香1 小时前
LeetCode 刷题【128. 最长连续序列】
算法·leetcode·职场和发展
被AI抢饭碗的人1 小时前
算法题(240):最大食物链计数
算法
熬了夜的程序员1 小时前
【LeetCode】82. 删除排序链表中的重复元素 II
数据结构·算法·leetcode·链表·职场和发展·矩阵·深度优先
欧克小奥2 小时前
Floyd判圈算法(Floyd Cycle Detection Algorithm)
算法·floyd
熬了夜的程序员3 小时前
【LeetCode】83. 删除排序链表中的重复元素
算法·leetcode·链表
胖咕噜的稞达鸭3 小时前
AVL树手撕,超详细图文详解
c语言·开发语言·数据结构·c++·算法·visual studio
YSRM3 小时前
Leetcode+Java+图论II
java·leetcode·图论
熊猫钓鱼>_>3 小时前
Rust语言特性深度解析:所有权、生命周期与模式匹配之我见
算法·rust·软件开发·函数·模式匹配·异步编程·质量工具