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;

}
相关推荐
课堂剪切板38 分钟前
ch03 部分题目思路
算法
山登绝顶我为峰 3(^v^)32 小时前
如何录制带备注的演示文稿(LaTex Beamer + Pympress)
c++·线性代数·算法·计算机·密码学·音视频·latex
Two_brushes.3 小时前
【算法】宽度优先遍历BFS
算法·leetcode·哈希算法·宽度优先
森焱森5 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
QuantumStack7 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
写个博客7 小时前
暑假算法日记第一天
算法
绿皮的猪猪侠7 小时前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
hie988948 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
杰克尼8 小时前
BM5 合并k个已排序的链表
数据结构·算法·链表
.30-06Springfield9 小时前
决策树(Decision tree)算法详解(ID3、C4.5、CART)
人工智能·python·算法·决策树·机器学习