题目链接

穿搭大挑战

题目描述

衣柜里有三类衣物: 件上衣、 条裤子和 双鞋子。每天出门前,总会忘记穿一种(可能是上衣、裤子或鞋子)。若两套穿搭在任意一件衣物的选择上不同,则视为不同的穿搭方案。 请计算,在忘穿一件衣物的前提下,一共有多少种不同的穿搭方案。

输入:

  • 第一行输入一个整数 表示测试用例数量。
  • 接下来 行,每行输入三个整数

输出:

  • 对于每个测试用例,在一行上输出不同穿搭方案数量的值。

解题思路

这是一个基础的组合计数问题,可以通过分类讨论和乘法原理、加法原理来解决。

题目要求计算忘穿一件衣物时的总穿搭方案数。忘穿一件衣物共有三种可能情况,这三种情况是互斥的,因此我们可以分别计算每种情况下的方案数,然后将它们相加得到总方案数。

  1. 情况一:忘记穿上衣

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

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

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

根据加法原理,总的穿搭方案数是这三种情况的方案数之和: 总方案数 =

由于 的值可能很大,它们的乘积可能会超出标准32位整数的范围,因此在计算时应使用64位整型(在C++中是 long long,在Java中是 long)来存储结果,以防止数据溢出。

代码

#include <iostream>

using namespace std;
using LL = long long;

void solve() {
    LL a, b, c;
    cin >> a >> b >> c;
    LL ans = a * b + a * c + b * c;
    cout << ans << endl;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    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();
        while (t-- > 0) {
            long a = sc.nextLong();
            long b = sc.nextLong();
            long c = sc.nextLong();

            long ans = a * b + a * c + b * c;
            System.out.println(ans);
        }
    }
}
t = int(input())
for _ in range(t):
    a, b, c = map(int, input().split())
    ans = a * b + a * c + b * c
    print(ans)

算法及复杂度

  • 算法:数学、组合计数
  • 时间复杂度:,其中 是测试用例的数量。每个测试用例的计算是
  • 空间复杂度:,我们只需要常数级别的额外空间来存储变量。