php将数组值用 分开,PHP将数组分成基于相等值的组

我有一个Array包含2个值的数组,第一个是作者的编号,第二个是他的隶属关系.

Array (

[0] => Array (

[0] => 2

[1] => Department of General Chemistry

)

[1] => Array (

[0] => 3

[1] => Institute of Silicate Materials

)

[2] => Array (

[0] => 4

[1] => Department of General Chemistry

)

[3] => Array (

[0] => 5

[1] => Department of General Chemistry

)

[4] => Array (

[0] => 6

[1] => Institute of Silicate Materials

)

)

如果隶属关系相同,我如何分组作者?我需要输出如下:

3,6 Institute of Silicate Materials

2,4,5 Department of General Chemistry

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将一个数组分成和相等的四等分,可以先计算出数组的总和,然后判断是否可以被4整除,如果不能被4整除,则无法分成和相等的四等分。 如果可以被4整除,可以使用回溯法来处理。具体地,从数组的第一个元素开始,依次将元素加入四个区域中的一个,直到所有元素都被加入某个区域中。每当一个元素被加入某个区域后,检查该区域的和是否等于总和的1/4,如果是,则开始向下一个区域添加元素,否则继续尝试向该区域添加元素。如果四个区域都被填满且和相等,则找到了一种分割方案;否则回溯到前一步,重新尝试其它方案。 下面是一份用 C++ 实现的代码,可以解决将数组分成和相等的四等分问题: ```cpp #include <iostream> #include <vector> using namespace std; bool dfs(vector<int>& nums, vector<int>& sums, int index, int target) { if (index == nums.size()) { return sums[0] == target && sums[1] == target && sums[2] == target; } for (int i = 0; i < 4; i++) { if (sums[i] + nums[index] > target) { continue; } sums[i] += nums[index]; if (dfs(nums, sums, index + 1, target)) { return true; } sums[i] -= nums[index]; } return false; } bool canSplitIntoFour(vector<int>& nums) { int sum = 0; for (int num : nums) { sum += num; } if (sum % 4 != 0) { return false; } vector<int> sums(4, 0); return dfs(nums, sums, 0, sum / 4); } int main() { vector<int> nums = {1, 2, 3, 6}; if (canSplitIntoFour(nums)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; } ``` 这里的 dfs 函数表示从 nums 数组的第 index 个元素开始,尝试将元素分配到四个区域中的一个,使得四个区域的和都等于 target。sums 数组表示四个区域的和,每次尝试将一个元素加入某个区域时,都需要检查该区域的和是否超过了 target。如果四个区域都被填满且和相等,则找到了一种分割方案,返回 true;否则回溯到前一步,重新尝试其它方案。 在主函数中,首先计算出数组的总和,如果不能被4整除,则无法分成和相等的四等分;否则调用 canSplitIntoFour 函数进行处理。如果可以分成四等分,则输出 Yes,否则输出 No。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值