袜子配对问题

这篇博客探讨了一个有趣的数学问题,即在一个包含多种颜色袜子的抽屉中,如何确保取出的袜子至少有一双颜色相同。作者通过动态规划的思路分析了情况,并给出了代码实现。当所有袜子都是单只时,返回-1,否则计算所有不唯一颜色的袜子数加1作为答案。博客内容涉及基础算法和逻辑思维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

在衣柜抽屉中杂乱无章地放着种不同颜色的袜子,其中第种颜色的袜子有a_i只。小招喵现在正着急去参加一场宴会,但是小招喵是一个色盲,所以无法分辨自己将要穿的袜子是不是同一颜色的,因此他随手抓了一把袜子,打算带到牛牛家让牛牛帮忙。
现在的问题是,最少要从抽屉中取出多少只袜子才能保证其中一定有两只可以配成颜色相同的一双?

思路

情况1:全是单只袜子,返回-1.
情况2:统计所有袜子的种类+1;

动态数组

int *a=new int[n];
……
delete[] a;

代码

#include <iostream>
using namespace std;
int main()
{
     int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        //vector <int> a;
        int* a = new int[n];
        int num=0;
        int flage=0;
        for (int i = 0; i < n; i++)
        {
            cin >> a[i];
            if (a[i] > 1)
            {
                num++;
                flage = 1;
            }
            if(a[i]==1)
            {
                num++;
            }
        }
        if (flage)
        {
            cout << num+1<<endl;
        }
        else {
            cout << -1<<endl;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值