分组飞行棋棋子

问题描述

小M和小F在玩飞行棋。游戏结束后,他们需要将桌上的飞行棋棋子分组整理好。现在有 N 个棋子,每个棋子上有一个数字序号。小M的目标是将这些棋子分成 M 组,每组恰好5个,并且组内棋子的序号相同。小M希望知道是否可以按照这种方式对棋子进行分组。

例如,假设棋子序号为 [1, 2, 3, 4, 5],虽然只有5个棋子,但由于序号不同,因此不能形成有效的分组。如果序号是 [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],则可以形成两个有效分组,因此输出为 True


测试样例

样例1:

输入:nums = [1, 2, 3, 4, 5]
输出:"False"

样例2:

输入:nums = [1, 1, 1, 1, 2, 1, 2, 2, 2, 2]
输出:"True"

样例3:

输入:nums = [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
输出:"True"

样例4:

输入:nums = [7, 7, 7, 8, 8, 8, 8, 8, 7, 7]
输出:"True"

样例5:

输入:nums = [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
输出:"False"

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
using namespace std;
typedef long long ll;

std::string solution(std::vector<int> nums) {
  // Please write your code here
  int num[10001] = {0};
  string ans = "";
  int i, maxnum = 0;
  for (i = 0; i < nums.size(); i++) {
    num[nums[i]]++;
    if (nums[i] > maxnum) {
      maxnum = nums[i];
    }
  }
  int a = 0;
  for (i = 0; i <= maxnum; i++) {
    if (num[i] % 5 != 0) {
      a = 1;
    }
  }
  if (a) {
    ans = "False";
  } else {
    ans = "True";
  }

  return ans;
}

int main() {
  // You can add more test cases here
  std::cout << (solution({1, 3, 4, 5, 6, 5, 4}) == "False") << std::endl;
  std::cout << (solution({1, 1, 1, 1, 2, 1, 2, 2, 2, 2}) == "True")
            << std::endl;
  std::cout << (solution({11, 45, 49, 37, 45, 38, 3,  47, 35, 49, 26, 16, 24,
                          4,  45, 39, 28, 26, 14, 22, 4,  49, 18, 4,  4,  26,
                          47, 14, 1,  21, 9,  26, 17, 12, 44, 28, 24, 24, 10,
                          31, 33, 32, 23, 41, 41, 19, 17, 24, 28, 46, 28, 4,
                          18, 23, 48, 45, 7,  21, 12, 40, 2,  19, 19, 28, 32,
                          6,  27, 43, 6,  18, 8,  27, 9,  6,  6,  31, 37, 15,
                          26, 20, 43, 3,  14, 40, 20}) == "False")
            << std::endl;
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值