鱼C论坛

 找回密码
 立即注册
查看: 1187|回复: 2

[技术交流] C语言Test

[复制链接]
发表于 2020-5-10 23:18:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[n][2]; // 创建临时变量
    int i, j;
    for(i = 1;i <= N;i++)
    {
        fscanf(fin, "%d %d\n", &map[i][0], &map[i][1]);
    }
    // 循环 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[i][1]-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[0]; // 插入
    }
    // 最重要的一部分(分开中)
    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;
}
[/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-10 23:23:52 | 显示全部楼层
本帖最后由 jackz007 于 2020-5-10 23:35 编辑

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

使用道具 举报

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

说的没毛病
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表