Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 递归链表?我想_C - Fatal编程技术网

C 递归链表?我想

C 递归链表?我想,c,C,我是个新手,我很难理解学习如何有效编码所需的宏步骤。这些作业感觉非常抽象,在我做之前,我必须学习递归的所有知识。编写一个程序并不容易,可以说,当有人“帮助我在蛋黄酱和芥末之间徘徊”时,我做得非常好。我做错了什么?我需要朝着什么方向继续 我在想,我需要先对列表进行排序,然后根据分配使用两个单独的函数进行合并排序和插入排序: 在这场大流行中,你们大部分时间都呆在家里。对人们来说,最重要的是要知道其他人在哪里,他们在哪里 感染了新冠病毒的人是谁,他们与谁有过接触。保持 此信息的跟踪称为“联系人跟踪”

我是个新手,我很难理解学习如何有效编码所需的宏步骤。这些作业感觉非常抽象,在我做之前,我必须学习递归的所有知识。编写一个程序并不容易,可以说,当有人“帮助我在蛋黄酱和芥末之间徘徊”时,我做得非常好。我做错了什么?我需要朝着什么方向继续

我在想,我需要先对列表进行排序,然后根据分配使用两个单独的函数进行合并排序和插入排序:

在这场大流行中,你们大部分时间都呆在家里。对人们来说,最重要的是要知道其他人在哪里,他们在哪里 感染了新冠病毒的人是谁,他们与谁有过接触。保持 此信息的跟踪称为“联系人跟踪” 你听说过可能会有一些高薪的工作 如果您能向客户展示您的合同跟踪技能 政府,所以你决定写一个小程序来强调 这些技能。你的区域可以在笛卡尔平面上建模。你是 位于点(x,y)处。此外,还有笛卡尔坐标 目前感染新冠病毒-19的所有人的坐标。 您想做的是编写一个程序,对 这些位置基于它们与您的距离,然后是 处理查询。这些查询的形式为您正在查询的点 想去看看。您的程序应该识别 被感染的人就在那个地方,如果是的话,他们的排名是多少 已分类的感染者名单。如果当时没有人被感染 在那个位置,你应该正确地识别这个

注意:此任务有许多重要的实现限制,因此为了确保每个人都阅读这些限制,请参阅 下一步将是实施限制,更改 与其他作业相比的部分

实施限制

  • 必须使用指定的合并排序和插入排序组合对点数据进行排序。具体来说,对于每个输入 在这种情况下,将给出阈值t。如果 要排序的数组有t个或更少的值要排序,插入排序应为 用过。否则,应使用合并排序。有关 用于排序的比较如下所示
  • 必须将坐标存储在包含两个整数字段的结构中
  • 您必须编写一个函数compareTo,它接受两个指针ptrPt1和ptrPt2来协调结构并返回 如果ptrPt1指向的点离您较近,则为负整数 比ptrPt2指向的点大,如果两个位置指向 两者都是相同的位置,如果点 ptrPt1指向的点比ptrPt1指向的点离您更远 ptrPt2。例外情况是当两个指针指向时 到距离您相同但不同的点 要点。在这些情况下,如果ptrPt1的x坐标较低 比ptrPt2的x坐标,必须为负整数 返回。或者,如果ptrPt1的x坐标大于 ptrPt2的x坐标必须返回正整数。最后,如果 如果ptrPt1的y坐标相同,则两个点的x坐标相同 小于ptrPt2的y坐标,则必须为负整数 返回。如果ptrPt1的y坐标大于ptrPt2的y坐标 坐标,则必须返回正整数
  • 由于您的位置必须用于排序,请将存储x和y坐标的变量设置为全局变量。你的程序 应该没有其他全局变量
  • 必须使用二进制搜索函数 在回答问题时使用
  • 您的排序功能应该接受 要排序的数组、数组的长度以及 阈值t,前面提到过。此功能不应 是递归的。它应该是一个包装函数
  • 递归排序 函数(您可以调用此mergeSort)应采用 数组中的起始索引,数组中的结束索引 数组和阈值t。在这个函数中,递归 应进行调用或调用插入排序函数 制造
  • 问题

    根据您所在的位置以及每个感染新冠病毒-19的人的位置,按距离从最短到最短的顺序对列表进行排序 最长,通过x坐标断开连接(先下), 然后通过y坐标打破这些联系(下 首先)。排序后,回答有关列表中点的几个问题 坐标平面。具体地说,确定查询点是否包含 被感染与否的人。如果是,确定此人的排名 在离你很远的排序列表上

    输入(从标准输入读取)-您的程序将在多个文件上进行测试

    输入的第一行包含5个由空格分隔的整数。这个 前两个值是x和y(|x |,|y |≤ 10000),代表 你的位置。第三个整数是n(2)≤ N≤ 106),代表 感染人数。第四个整数是s(1)≤ s≤ 2x105), 表示要搜索的点数。最后 整数,t(1)≤ T≤ 30),表示要用于的阈值 确定是否运行插入排序的合并排序。下一个 n行输入分别包含x和y坐标值, 由空格分隔,表示感染者的位置。 这些值中的每一个都是整数,并且点是不同的 (也不同于您的位置)和x的绝对值 所有这些坐标的y都不会超过10000 文件的下一个s行包含的x和y坐标值 搜索。每行上的两个值都是带有绝对值的整数 一文不值
    x y found at rank R
    
    x y not found
    
    0 0 14 5 53
    1 -6 
    -2 -4 
    3 4 
    -4 2 
    4 -1 
    3 2 
    2 0 
    -5 -4 
    -2 -6 
    6 4 
    4 -2 
    4 0 
    5 -4 
    6 2 
    -13 1  
    0 -5
    
    #include <stdio.h>
    
    int x = 0;//global coordinates
    int y = 0;
    
    typedef struct {
        int xInput, yInput;
    }coordinates;
    
    void scanPoints(coordinates[], int infectedPeople);
    void scanSearchValues(coordinates[], int pointsToSearch);
    
    void SortPoints(coordinates[], int);
    int lessThan(coordinates[], int, int);
    void printPoints(coordinates[], int);
    
    void
    scanPoints(coordinates pts[], int infectedPeople){
        for (int i = 0; i < infectedPeople; i++){
            scanf("%d %d", &pts[i].xInput, &pts[i].yInput);
        }
    }
    
    void
    scanSearchValues(coordinates pts[], int pointsToSearch){
        for (int i = 0; i < pointsToSearch; i++){
        scanf("%d %d", &pts[i].xInput, &pts[i].yInput);
        }
    }
    
    void
    sortPoints(coordinates pts[], int infectedPeople){
      
        int i, start, min_index, temp;
    
        for (start = 0; start < infectedPeople - 1; start++) {
        min_index = start;
    
        for (i = start + 1; i < infectedPeople; i++) {
        if (lessThan(pts, i, min_index)) {
        min_index = i;
        }
        }
    
        if (min_index != start) {
        coordinates temp = pts[start];
        pts[start] = pts[min_index];
        pts[min_index] = temp;
        }
        }
    }
    
    int
    lessThan(coordinates pts[], int p, int q) {
    
    if ((pts[p].xInput < pts[q].xInput) || ((pts[p].xInput == pts[q].xInput) && (pts[p].yInput < pts[q].yInput))) {
    return 1;
        }
    }
    
    
    
    
    int
    main(int argc, const char * argv[]) {
        
        int infectedPeople;
        int pointsToSearch;
        int threshold;
       
        scanf("%d%d", &x, &y);
        if(x > 10000 || y > 10000 )
            return 0;
    
        scanf("%d", &infectedPeople);
        if(infectedPeople < 2 || infectedPeople > 1000000)
            return 0;
       
        scanf("%d", &pointsToSearch);
        if(pointsToSearch < 1 || pointsToSearch > 200000)
            return 0;
        
        scanf("%d", &threshold);
        if(threshold < 1 || threshold > 30)
            return 0;
        
        
        return 0;
        
    }
    
    int
    lessThan(coordinates pts[], int p, int q) {
    
    if ((pts[p].xInput < pts[q].xInput) || ((pts[p].xInput == pts[q].xInput) && (pts[p].yInput < pts[q].yInput))) {
    return 1;
        }
    }
    
    int lessThan(coordinates pts[], int p, int q)
    {
      return ((pts[p].xInput < pts[q].xInput) || ((pts[p].xInput == pts[q].xInput) && (pts[p].yInput < pts[q].yInput)));
    }
    
    void sortCoordinates(coordinates coords[], int count, int threshold) {
        if (/* your condition here */) {
            insertionSortCoordinates(coords, count);
        } else {
            mergeSortCoordinates(coords, count);
        }
    }
    
    int compareTo(coordinates *ptrPt1, coordinates *ptrPt2) {
        /* your code here */
    }
    
    int binarySearch(coordinates *target, coordinates coords[]) {
        /* your code here: returns 1-based rank if found, zero if not found */
    }