我将如何做第一部分和第二部分?
How would i do first and second parts?
假设我们必须从 n 个人中选出一个 Leader。为此,我们创建了一个
大小为 n 的数组。我们为每个候选人分配一个数字 (1, 2, 3, 4, 5,….,n) 并将其存储在数组中
升序。我们申请跳舞椅(人家争抢椅子!!!停止后
音乐,在每次迭代中淘汰一把椅子和一个人。最后剩下的一个是
获胜者)方法。假设我们从索引 0 开始,那么我们必须跳过 3 个索引,我们将到达
在索引 3 处。将其值设置为零,然后从索引 4 重新开始并跳过 3 个索引,我们将到达索引 7。重复相同的步骤,依此类推。
(1) 当我们到达最后一个索引时,我们将再次进入索引 0(例如,最后一个索引是 19,我们从索引 18 开始计数并跳过 3 个索引,然后我们将到达 1 并设置它为零)。
(2) 如果到达的元素值已经为 0,则将下一个元素设置为零。做同样的过程直到只剩下一个元素?
我们使用数组和函数来实现。写一个函数 SelectLeader () 接受数组
作为输入和 return 领导者。
#include <stdio.h>
int SelectLeader() {
int n, i;
int leader = 0;
printf("Enter total number of people to choose a Leader from: ");
scanf("%d", &n);
int array[n];
for (i = 0; i < n; i++) {
array[i] = i + 1;
}
for (i = 0; i <= n; i = (i + 3) % n) {
if (array[i] == 0) {
array[(i + 1) % n] = 0;
} else
array[i] = 0;
}
for (i = 0; i < n; i++) {
if (array[i] != 0) {
leader = i;
}
}
return leader;
}
int main() {
int L;
L = SelectLeader();
printf("Leader is the candidate with the index number %d\n", L);
}
您可以使用以下伪代码
假设n= 10 ,为了便于理解
我正在创建一个布尔值 flag array
来检查是否选择了数字。
jump = 3
i = 0
for (int cnt=0;cnt<10;) {
if(flag[i%10] === false) {
flag[i%10]=true;
cnt+=1;
i+=jump;
}
else {
i+=1;
}
}
flag false
剩下的索引元素是ans.
然而,这种方法既 space 又费时。
假设我们必须从 n 个人中选出一个 Leader。为此,我们创建了一个 大小为 n 的数组。我们为每个候选人分配一个数字 (1, 2, 3, 4, 5,….,n) 并将其存储在数组中 升序。我们申请跳舞椅(人家争抢椅子!!!停止后 音乐,在每次迭代中淘汰一把椅子和一个人。最后剩下的一个是 获胜者)方法。假设我们从索引 0 开始,那么我们必须跳过 3 个索引,我们将到达 在索引 3 处。将其值设置为零,然后从索引 4 重新开始并跳过 3 个索引,我们将到达索引 7。重复相同的步骤,依此类推。
(1) 当我们到达最后一个索引时,我们将再次进入索引 0(例如,最后一个索引是 19,我们从索引 18 开始计数并跳过 3 个索引,然后我们将到达 1 并设置它为零)。
(2) 如果到达的元素值已经为 0,则将下一个元素设置为零。做同样的过程直到只剩下一个元素?
我们使用数组和函数来实现。写一个函数 SelectLeader () 接受数组 作为输入和 return 领导者。
#include <stdio.h>
int SelectLeader() {
int n, i;
int leader = 0;
printf("Enter total number of people to choose a Leader from: ");
scanf("%d", &n);
int array[n];
for (i = 0; i < n; i++) {
array[i] = i + 1;
}
for (i = 0; i <= n; i = (i + 3) % n) {
if (array[i] == 0) {
array[(i + 1) % n] = 0;
} else
array[i] = 0;
}
for (i = 0; i < n; i++) {
if (array[i] != 0) {
leader = i;
}
}
return leader;
}
int main() {
int L;
L = SelectLeader();
printf("Leader is the candidate with the index number %d\n", L);
}
您可以使用以下伪代码
假设n= 10 ,为了便于理解
我正在创建一个布尔值 flag array
来检查是否选择了数字。
jump = 3
i = 0
for (int cnt=0;cnt<10;) {
if(flag[i%10] === false) {
flag[i%10]=true;
cnt+=1;
i+=jump;
}
else {
i+=1;
}
}
flag false
剩下的索引元素是ans.
然而,这种方法既 space 又费时。