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;

}
相关推荐
Dann Hiroaki1 分钟前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
qqxhb2 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
FirstFrost --sy3 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森4 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
搂鱼1145144 小时前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法
Yingye Zhu(HPXXZYY)4 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
无聊的小坏坏5 小时前
三种方法详解最长回文子串问题
c++·算法·回文串
长路 ㅤ   5 小时前
Java后端技术博客汇总文档
分布式·算法·技术分享·编程学习·java后端
秋说6 小时前
【PTA数据结构 | C语言版】两枚硬币
c语言·数据结构·算法
qq_513970446 小时前
力扣 hot100 Day37
算法·leetcode