基本算法思想(一)

穷举算法

1、什么是穷举?

穷举算法是最简单的一种算法,其依赖于计算机的强大计算能力,来穷尽每一种可能的情况,从而达到求解问题的目的。

穷举算法效率并不高,但适用于一些没有明显规律可循的场景。基本思想是从所有可能的情况中搜索正确的答案,在使用穷举算法时,需要明确问题的答案的范围,这样才可以在指定范围内搜索答案。指定范围之后,就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得到需要的正确答案。其执行步骤如下:

(1). 对于一种可能的情况,计算其结果;

(2). 判断结果是否满足要求,如果不满足则执行第(1)步来搜索下一个可能的情况;如果满足要求,则表示寻找到一个正确的答案。

2、穷举算法应用
鸡兔同笼

鸡兔同笼问题最早记载于1500年前的《孙子算经》,是我国古代一个非常有名的问题,原文如下:今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?

翻译过来的意思是在一个笼子里关着若干只鸡和若干只兔,从上面数共有35个头;从下面数共有94只脚。问笼中鸡和兔的数量各是多少?题目要计算鸡的数量和兔的数量,通过分析可以知鸡的数量应该为0~35之间的数。

基于该思路,可以使用穷举法来逐个判断是否符合条件,从而得到答案。

3.C语言实现 

#include <stdio.h>

int main() {
    int n, m;
    scanf("%d%d", &n, &m); // 输入鸡兔的总数量n和腿的总数m

    int a, b;
    if (m % 2 == 0 && 2 * n <= m && m <= 4 * n) { // 条件检查,确保问题有解
        b = (m - 2 * n) / 2; // 计算兔子的数量
        a = n - b; // 计算鸡的数量
        printf("%d %d\n", a, b); // 输出鸡和兔的数量
    }
    else {
        printf("无解\n"); // 输出无解
    }

    return 0;
}

4.C++语言实现

#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m; // 输入鸡兔的总数量n和腿的总数m

    int a, b;
    if (m % 2 == 0 && 2 * n <= m && m <= 4 * n) {
        b = (m - 2 * n) / 2;
        a = n - b;
        cout << a << " " << b << endl; // 输出鸡和兔的数量
    }
    else {
        cout << "无解" << endl; // 输出无解
    }

    return 0;
}

5.Java语言实现

(1)方式一

public class Test {
    /** 鸡的数量、兔子数量 */
    public static int chicken, rabbit;
 
    /** 穷举.... */
    public static boolean getAmount(int header, int foot) {
        boolean flag = false;
        int j; // j 兔子数量
        for (int i = 0; i < header; i++) { // i 鸡的数量
            j = header - i;
            if (foot == (2 * i + 4 * j)) {
                chicken = i;
                rabbit = j;
                flag = true;
            }
        }
        return flag;
    }
 
    /** 测试结果:有鸡23只, 有兔12个 */
    public static void main(String[] args) {
        // 上有三十五头,下有九十四足,问鸡兔各几何?
        if (getAmount(35, 94)) {
            System.out.println("有鸡" + chicken + "只, 有兔" + rabbit + "个");
        }
    }
}

(2)方式二

import java.util.Scanner;
 
public class ChickenRabbitInCage {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
 
        System.out.print("请输入总头数:");
        int totalHead = input.nextInt();
 
        System.out.print("请输入总脚数:");
        int totalFoot = input.nextInt();
 
        int chickenCount = 0;
        int rabbitCount = 0;
        boolean found = false;
 
        for (int i = 0; i <= totalHead; i++) {
            chickenCount = i;
            rabbitCount = totalHead - i;
 
            if (chickenCount * 2 + rabbitCount * 4 == totalFoot) {
                found = true;
                break;
            }
        }
 
        if (found) {
            System.out.println("鸡的数量是:" + chickenCount);
            System.out.println("兔的数量是:" + rabbitCount);
        } else {
            System.out.println("无法求解!");
        }
 
        input.close();
    }
}

6.Python语言实现

(1)方式一

def chicken_and_rabbit(head,foot):
     #计算全是鸡还多余几只脚
     foot_remain = foot - head*2
     if foot_remain%2==0:#一只兔子多2只脚,计算有多少只兔子
         rabbit = int(foot_remain/2)
         chicken = head-rabbit
         print("鸡有", chicken, "只;兔子有", rabbit, "只")
     else:
         print("无解")

(2)方式二

def chicken_and_rabbit(head, foot):
    answer = False
    for x in range(head + 1):
        for y in range(head + 1):
            if x + y == head and 2 * x + 4 * y == foot:
                answer = True
                break
 
        if answer:
            break
 
    if answer:
        print("鸡有", x, "只;兔子有", y, "只")
    else:
        print("无解")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值