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;

}
相关推荐
wadesir3 小时前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
yugi9878384 小时前
基于MATLAB实现协同过滤电影推荐系统
算法·matlab
TimberWill4 小时前
哈希-02-最长连续序列
算法·leetcode·排序算法
Morwit4 小时前
【力扣hot100】64. 最小路径和
c++·算法·leetcode
leoufung4 小时前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode
wifi chicken5 小时前
数组遍历求值,行遍历和列遍历谁更快
c语言·数据结构·算法
胡楚昊5 小时前
NSSCTF动调题包通关
开发语言·javascript·算法
Gold_Dino6 小时前
agc011_e 题解
算法
bubiyoushang8886 小时前
基于蚁群算法的直流电机PID参数整定 MATLAB 实现
数据结构·算法·matlab
风筝在晴天搁浅6 小时前
hot100 240.搜索二维矩阵Ⅱ
算法·矩阵