从1 到 300 随便选出三个数 使这三个数的和恰好能被三整除(巧妙的方法)

将1 到 300 分成3组

及{1,4,7......,298}

    {2,5,8......,299}

    {3,6,9......,300}

讨论:

case 1:3个数都从一个集合选出,可以被三整除

case 2:3个数分别从三个集合选出;

借用组合数学知识可巧解

S = 3 * c(100,3) + 100*100*100 = 148500

### 回答1: C++代码如下:#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> arr = {1,2,3,4,5,6,7,8,9,10}; random_shuffle(arr.begin(), arr.end()); vector<int> three_numbers(arr.begin(), arr.begin()+3); for (int i=0; i<three_numbers.size(); i++) cout << three_numbers[i] << " "; return 0; } ### 回答2: 以下是一个实现C++中通过PickPivot随机从组中选出三个的代码: #include <iostream> #include <random> using namespace std; int main() { // 定义一个数组 int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 初始化随机生成器 random_device rd; mt19937 gen(rd()); uniform_int_distribution<int> dist(0, 9); // 从组中随机选三个 int p1 = arr[dist(gen)]; int p2 = arr[dist(gen)]; int p3 = arr[dist(gen)]; // 打印选出三个 cout << "选出三个分别为:" << p1 << ", " << p2 << ", " << p3 << endl; return 0; } 以上代码首先定义了一个包含10个元素的整组arr,然后使用random_device和mt19937初始化了随机生成器gen,并使用uniform_int_distribution定义了一个整分布dist,范围为0到9(组的索引范围)。接下来,通过dist(gen)从组arr中随机选三个,分别赋值给p1、p2和p3。最后,打印选出三个。 ### 回答3: 下面是用C++写的通过PickPivot随机从组中选出三个的代码: ```cpp #include <iostream> #include <ctime> #include <cstdlib> int PickPivot(int arr[], int size) { srand(time(0)); // 设置随机种子为当前时间 // 生成一个0到size-1的随机索引 int index = rand() % size; return arr[index]; } int main() { int size = 10; int arr[size] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 使用PickPivot函组中选出三个 int pivot1 = PickPivot(arr, size); int pivot2 = PickPivot(arr, size); int pivot3 = PickPivot(arr, size); std::cout << "选出三个为:" << pivot1 << ", " << pivot2 << ", " << pivot3 << std::endl; return 0; } ``` 上述代码首先定义了一个函`PickPivot`,它接受一个整型组和组大小作为参。函内部使用`srand`函设置随机种子为当前时间,并使用`rand`函生成一个0到`size-1`的随机索引。然后根据随机索引从组中选出个数作为结果返回。 在`main`函中,我们定义了一个大小为10的整型组,并初始化了组元素。然后使用`PickPivot`函次,分别选出三个随机`pivot1`、`pivot2`和`pivot3`。最后将结果输出到控制台。 这样,我们就通过PickPivot函随机从组中选出三个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值