有人可以告诉我这有什么问题吗?

标签 c arrays

问题:哇,你得到了两件事:

所有进程的调用顺序。 所有进程执行的理想顺序。 现在,让我们通过一个例子来演示这一点。假设有3个进程,进程的调用顺序是:3 - 2 - 1。理想的顺序是:1 - 3 - 2,即进程号3只有在进程号1完成后才会执行;进程号2只有在进程号3执行完之后才会被执行。

  1. 迭代#1: 由于理想的顺序是首先执行进程#1,因此调用顺序发生了变化,即第一个元素必须被推到最后一个位置。改变元素的位置需要1个时间单位。新的调用顺序为:2 - 1 - 3。第 1 步所用时间:1。

  2. 迭代#2:由于理想的顺序是首先执行进程#1,因此必须再次更改调用顺序,即必须将第一个元素推到最后一个位置。新的调用顺序为:1 - 3 - 2。第 2 步所用时间:1。

  3. 迭代 #3:由于调用顺序的第一个元素与理想顺序相同,因此将执行该过程。它就会这样弹出来。第 3 步所用时间:1。

  4. 迭代#4:由于调用顺序的新第一个元素与理想顺序相同,因此将执行该过程。第 4 步所用时间:1。

  5. 迭代#5:由于调用顺序的最后一个元素与理想顺序相同,因此将执行该过程。第 5 步所用时间:1。

总时间:5 个单位。 S:执行一个进程需要1个单位时间。改变位置需要1个时间单位。

输入格式: 第一行数字N,表示进程数。第二行包含进程的调用顺序。第三行包含进程的理想顺序。

输出格式: 打印要执行的整个进程队列所花费的总时间。

约束:1<=N<=100

示例输入

3
3 2 1
1 3 2

示例输出

5

我想到的第一个方法是声明一个变量,并在每次交换后将其加一加 2,但是如果我们采用大小为 3 的数组,则只有两种可能性。因此我打印了这些,是的,这是一个在线法官的问题,没有语法错误,但在网站上它告诉我声明中有一些问题,我不知道该怎么办,我是编程新手有人可以建议一种适用于更大尺寸数组的新方法吗?

#include <stdio.h>

swap(a,b);
long long int a,b;

int main(void) {
  long long int n,i;
  long long int a[3],b[3];
  scanf("%d",&n);

  for(i=0;i<=2;i++)
  {
    scanf("%d",a[i]);
  }

  for(i=0;i<=2;i++)
  {
    scanf("%d",&b[i]);
  }

  if(a[i]=b[i])
  {
    printf("2");
  }

  while(a[i]!=b[i])
  {
    swap(b[0],b[2]);
    swap(b[0],b[1]);
    {
      if(a[i]=b[i])
      printf("5");
    }
  }

  return 0;
}

swap(a,b){
  long long int temp;
  a=temp;
  b=a;
  temp=b;
  return swap(a,b);
}

最佳答案

您的 swap() 函数存在多个问题:

1:它在函数最后一行通过 return swap(a,b); 调用自身。这将导致无限递归和堆栈溢出。

2:需要声明函数的返回类型。如果它需要两个long long参数并且不返回任何内容,那么它应该声明如下:

void swap(long long a, long long b);

3:正如所写,该函数无论如何都不会产生任何效果。如果您想更改这些变量的值,您需要将指针传递给它们:

long long swap(long long *a, long long *b);

4:要将指针传递给此函数,请在参数前添加 & 前缀,如下所示:

swap(&b[0],&b[2]);   /* NOT: swap(b[0],b[2]); */

5:swap()函数中的操作顺序也是错误的。首先,您将无法挽回地丢失 a 的值,而不是将其存储起来以便将其分配给 b。试试这个:

void swap(long long *a, long long *b) {
    long long temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
<小时/>

注意:请了解如何正确设置代码格式。另外,请始终在启用警告的情况下编译开发代码(例如,将 -Wall -pedantic 添加到命令行)。这样做会引起您对大多数(如果不是全部)这些问题的注意,而不必在这里询问。

关于有人可以告诉我这有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133350/

相关文章:

php - 有没有更好的方法来转置 PHP 二维数组?

javascript - 使用两个相关数组进行循环

自定义 Doxygen html 输出

c - 如何连接、评估和字符串化宏?

java - 将时间转换为英文单词

javascript - 额外的斜杠出现在 json 数组中

c - 使用 pid 启动 gdb

c - 在函数中传递二维数组 - 从 C 中的函数返回二维数组

c - 使用指针在递归函数中创建一个计数器?

javascript - 如何删除已使用的 JavaScript 建议数组值?