题目链接

穿搭大挑战

题目描述

旺仔哥哥的衣柜里只有三类衣物:上衣、裤子和鞋子,数量分别为 件。每天出门前,他总会忘记穿一种(可能是上衣、裤子或鞋子)。

若两套穿搭在任意一件衣物的选择上不同,则视为不同的穿搭方案。请你计算,旺仔哥哥在忘穿一件衣物的前提下,一共有多少种不同的穿搭方案。

解题思路

这是一个基础的组合计数问题,可以运用加法原理和乘法原理来解决。问题要求计算在“忘穿一件衣物”的前提下的总穿搭方案数。我们可以将这个前提分解为三个互不相干的独立情况:

  1. 情况一:忘穿上衣 此时,旺仔哥哥只穿裤子和鞋子。

    • 裤子的选择有 种。
    • 鞋子的选择有 种。 根据乘法原理,这种情况下的穿搭方案数为
  2. 情况二:忘穿裤子 此时,旺仔哥哥只穿上衣和鞋子。

    • 上衣的选择有 种。
    • 鞋子的选择有 种。 根据乘法原理,这种情况下的穿搭方案数为
  3. 情况三:忘穿鞋子 此时,旺仔哥哥只穿上衣和裤子。

    • 上衣的选择有 种。
    • 裤子的选择有 种。 根据乘法原理,这种情况下的穿搭方案数为

由于这三种情况是彼此独立的(不可能同时忘穿上衣又忘穿裤子),根据加法原理,总的穿搭方案数就是这三种情况的方案数之和。

因此,总方案数

题目包含 组测试用例,我们只需对每一组输入的 执行上述计算即可。

代码

#include <iostream>

using namespace std;

int main() {
    int T;
    // 读取测试用例数量
    cin >> T;
    while (T--) {
        long long c1, c2, c3;
        // 读取三类衣物的数量
        cin >> c1 >> c2 >> c3;
        // 根据公式计算并输出总方案数
        long long ans = c1 * c2 + c1 * c3 + c2 * c3;
        cout << ans << endl;
    }
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读取测试用例数量
        int T = sc.nextInt();
        for (int i = 0; i < T; i++) {
            // 读取三类衣物的数量
            long c1 = sc.nextLong();
            long c2 = sc.nextLong();
            long c3 = sc.nextLong();
            // 根据公式计算并输出总方案数
            long ans = c1 * c2 + c1 * c3 + c2 * c3;
            System.out.println(ans);
        }
    }
}
# 读取测试用例数量
T = int(input())
for _ in range(T):
    # 读取三类衣物的数量
    c1, c2, c3 = map(int, input().split())
    # 根据公式计算并输出总方案数
    ans = c1 * c2 + c1 * c3 + c2 * c3
    print(ans)

算法及复杂度

  • 算法:数学、组合计数(加法原理、乘法原理)

  • 时间复杂度:对于每个测试用例,计算都是 的。总共有 个测试用例,因此总时间复杂度为

  • 空间复杂度:算法只需要固定的几个变量来存储输入和结果,因此总空间复杂度为