You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写函数生成指定二维整数方阵并统计相关单元格数量

解决方案:方阵生成与对角线填充问题

Alright, let's tackle your two problems one by one using Python—this language's built-in libraries and readability make it ideal for matrix tasks like this.

问题1:如何将数组对角线的75%填充为1,剩余25%填充为-1?

核心思路

要实现随机分布的75%为1、25%为-1,关键是不要固定位置(比如前75%的对角线元素全是1),而是先生成包含对应比例值的列表,再打乱顺序,最后赋值到对角线上。这样能保证随机性符合要求。

代码实现

import random

def fill_diagonal(n):
    # 计算需要的1和-1的数量:n是方阵的边长(对角线元素总数)
    ones_count = int(0.75 * n)
    neg_ones_count = n - ones_count
    
    # 生成包含对应比例值的列表
    diagonal_values = [1] * ones_count + [-1] * neg_ones_count
    # 打乱列表,确保随机分布
    random.shuffle(diagonal_values)
    
    # 初始化n×n矩阵(这里先以全0为例,你可以根据需求改成其他初始值)
    matrix = [[0 for _ in range(n)] for _ in range(n)]
    
    # 给对角线赋值
    for i in range(n):
        matrix[i][i] = diagonal_values[i]
    
    return matrix

关键细节解释

  • random.shuffle() 是核心:它会原地打乱列表元素,避免了“前75%全是1”的固定分布,真正实现随机的比例分配。
  • 用int(0.75 * n)计算1的数量:因为n是整数,这个计算会自动向下取整(比如n=5时,0.75*5=3.75,取3个1,2个-1,比例接近75%/25%)。

问题2:完整功能的方阵生成函数

需求拆解

我们需要实现一个满足以下所有要求的函数:

  1. 生成行列数相等的方阵,尺寸在[50,100]范围内且能被4整除
  2. 非对角线元素填充用户输入区间[a, b)内的随机整数
  3. 对角线元素按随机分布的75%为1、25%为-1填充
  4. 在控制台输出值小于指定阈值的单元格数量

完整代码实现

import random

def generate_special_matrix():
    # 1. 生成符合要求的方阵尺寸:[50,100]之间且能被4整除
    # 计算范围:4*13=52(≥50的最小4倍数),4*25=100(≤100的最大4倍数)
    n = random.randint(13, 25) * 4
    print(f"✅ 生成的方阵尺寸为:{n}×{n}")

    # 2. 获取用户输入的区间[a, b),做输入校验
    while True:
        try:
            a = int(input("请输入区间左边界a(整数):"))
            b = int(input("请输入区间右边界b(整数,需大于a):"))
            if b <= a:
                print("❌ 右边界b必须大于左边界a,请重新输入!")
                continue
            break
        except ValueError:
            print("❌ 请输入有效的整数!")

    # 3. 获取统计阈值(统计值小于该数的单元格数量)
    while True:
        try:
            threshold = int(input("请输入统计阈值(整数):"))
            break
        except ValueError:
            print("❌ 请输入有效的整数!")

    # 4. 生成对角线的随机值列表(75%为1,25%为-1)
    ones_count = int(0.75 * n)
    diagonal_values = [1] * ones_count + [-1] * (n - ones_count)
    random.shuffle(diagonal_values)

    # 5. 填充矩阵
    matrix = []
    for i in range(n):
        current_row = []
        for j in range(n):
            if i == j:
                # 对角线元素
                current_row.append(diagonal_values[i])
            else:
                # 非对角线元素:[a, b)区间的随机整数
                current_row.append(random.randrange(a, b))
        matrix.append(current_row)

    # 6. 统计值小于阈值的单元格数量
    below_threshold_count = 0
    for row in matrix:
        for num in row:
            if num < threshold:
                below_threshold_count += 1

    # 7. 输出结果
    print(f"\n📊 方阵中值小于{threshold}的单元格数量为:{below_threshold_count}")

    # 可选:返回矩阵,方便后续使用
    return matrix

# 调用函数运行
if __name__ == "__main__":
    generate_special_matrix()

关键细节解释

  1. 尺寸生成:直接用random.randint(13,25)*4,避免了生成随机数后再筛选的麻烦,一步到位得到符合要求的边长。
  2. 输入校验:通过while循环和try-except处理非整数输入、区间无效的情况,提升了函数的健壮性。
  3. 非对角线填充:用random.randrange(a,b)正好实现左闭右开区间的随机整数生成,完全符合需求。
  4. 统计逻辑:双重循环遍历整个矩阵,逐个判断元素是否小于阈值,简单直观且准确。

内容的提问来源于stack exchange,提问作者l1m4k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:18:01