juhugufudu 发表于 2020-5-10 23:18:38

C语言Test

#include <stdio.h>
#include <malloc.h>
FILE *fin, *fout; // 创建文件指针
/*
循环1
    1. 输入两个数字(插入几个以及本来链表的长度)
    2. 输入 N 个指令(value, index)
循环2
    1. 输入Len 个元素
把原来的指令插入循环2
    (1)找到index插入

第一个条件也许已经需要一个N空间了
当同种数字数量大于等于3 并且连在一起的话
    (1)以当前的p 为末尾指针,先前的2 位给去掉

2中计划 num 1~2
1 2 3 3 3 2 2
num 只记住连续的,即上一个是否是这个(p指向的)一样
这次的目标是3,因为 3=3 (2) =3(3)
打印链表
*/
struct node
{
    int num;
    struct node *next, *pre;
};// 创建结构体
struct node *head, *p, *q; // head用来标记,q用来新建空间,p用来连接
int N, Len; // 分别是插入的命令的个数和本来链表的长度

void print()
{
    p = head;
    while(p != NULL)
    {
      printf("%d ", p -> num);
      p = p -> next;
    }
    printf("\n");
}

int main()
{
    fin = fopen("ok.in", "r");
    fout = fopen("ok.out", "w");
    fscanf(fin, "%d %d", &N, &Len); // 输入1 开始
    const int n = N; int map; // 创建临时变量
    int i, j;
    for(i = 1;i <= N;i++)
    {
      fscanf(fin, "%d %d\n", &map, &map);
    }
    // 循环 2开始
    int x; //作为中间变量
    head = malloc(sizeof(struct node)); //创建头
    fscanf(fin, "%d", &x); head -> num = x; // 首次尝试
    head -> pre = NULL; // head的特性
    p = head; // 临时变量
    for(i = 2;i <= Len;i++)
    {
      q = malloc(sizeof(struct node));
      p -> next = q;
      q -> pre = p; // 建立连接
      fscanf(fin, "%d", &x); q -> num = x; // 输入x
      p = q; //替换(前进一步)
    }
    p -> next = NULL; // 结尾的特征
    // 把原来的指令插入链表
    for(i = 1;i <= N;i++)
    {
      p = head; // 回位
      for(j = 1;j <= map-1;j++) // 查找到那个位置
      {
            if(p -> next != NULL)p = p -> next; //前进
            else break;
      }
      q = malloc(sizeof(struct node));
      if(p -> next != NULL) {q -> next = p -> next;}
      else
      {
            q -> next = NULL; // 默认排到最后
      }

      p -> next = q;
      q -> pre = p;
      q -> num = map; // 插入
    }
    // 最重要的一部分(分开中)
    p = head;
    int best_num = 1;
    int pre_num = p -> num;
    for(i = 1;;i++)
    {
      if(p -> next == NULL) break;
      p = p->next;
      if(pre_num == p->num)
      {
            best_num += 1;
      }else{best_num = 1;}
      if(best_num >= 3)
      {
            // 这时就是这样的 1 2 3 3 3 2(p) 2
            p -> pre -> pre -> pre -> next = p;
      }
      pre_num = p -> num;
    }
    if(pre_num == p->num)
    {
      best_num += 1;
    }else{best_num = 1;}
    if(best_num >= 3)
    {
      // 这时就是这样的 1 2 3 3 3 2(p) 2
      p -> pre -> pre -> pre -> next = p;
    }
    print();
    fclose(fin);
    fclose(fout);
    return 0;
}

jackz007 发表于 2020-5-10 23:23:52

本帖最后由 jackz007 于 2020-5-10 23:35 编辑

       必须把代码贴入代码框,否则,代码中的部分内容,比如方括号中的 i 会被作为页面语言中的斜体指令而非文本内容来对待,这就意味着,从此以后,你的代码就会统统变成斜体字,相应地,代码中用于代表数组的方括号 i 也统统失踪了。看看你贴出的代码是不是这样?
       关键是,别人复制到你贴出的代码文本已经不是你所希望的样子了,而是已经丢失了很多内容的版本,所以,只要贴出的代码中有斜体字,别人一般都不太愿意帮你。

永恒的蓝色梦想 发表于 2020-5-11 07:16:44

jackz007 发表于 2020-5-10 23:23
必须把代码贴入代码框,否则,代码中的部分内容,比如方括号中的 i 会被作为页面语言中的斜体指令而 ...

说的没毛病{:10_298:}
页: [1]
查看完整版本: C语言Test