我将如何做第一部分和第二部分?

Posted

技术标签:

【中文标题】我将如何做第一部分和第二部分?【英文标题】:How would i do first and second parts? 【发布时间】:2022-01-16 20:19:46 【问题描述】:

考虑我们必须从 n 个人中选择一个领导者。为此,我们创建了一个 大小为 n 的数组。我们为每个候选人分配一个数字 (1, 2, 3, 4, 5,….,n) 并将其存储在数组中 升序。我们应用跳舞椅(人们很难得到椅子!!!停止后 音乐,在每次迭代中,都会淘汰一把椅子和一个人。最后剩下的一个是 赢家)方法。假设我们从索引 0 开始,那么我们必须跳过 3 个索引,我们将到达 在索引 3 处。将其值设置为零并从索引 4 重新开始并跳过 3 个索引,我们将到达索引 7。重复相同的步骤,依此类推。

(1) 当我们到达最后一个索引时,我们将再次进入索引 0(例如,最后一个索引是 19,我们从索引 18 开始计数并跳过 3 个索引,然后我们将到达 1 并将其设置为零)。

(2) 如果到达的元素值已经为 0,则将下一个元素设置为零。做同样的过程直到只剩下一个元素?

我们通过使用数组和函数来实现它。写一个函数 SelectLeader() 接受数组 作为输入并返回领导者。

#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);

【问题讨论】:

我会先格式化代码。 "" - 什么?请详细说明问题。 你问的是same question吗?您尚未更正 i&lt;=n 错误。 你在发布你的学校作业吗? 请注意,i = (i + 3) % n i始终&lt; n,因此存在无限循环。 【参考方案1】:

您可以使用以下伪代码

假设 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。

但是这种方法既耗费空间又耗费时间。

【讨论】:

哦,让我试试这个 不,伙计,我试过了。我无法理解我由此产生的错误。而且我不知道如何返回“标志错误”的答案。还有比这更简单的方法吗? 你可以通过运行一个循环返回fanswer,当 flag[i]==false 时中断,i 的值就是答案。这是蛮力方法。

以上是关于我将如何做第一部分和第二部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在屏幕左侧显示第一部分和右侧第二部分的 UICollectionView

初步了解URL

同一视图中的 SwiftUI 动画显示方式不同

具有特定条件的 MySQL GROUP BY

将一个复杂的字符串分成 3 个部分

URL和URI的区别