| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2025 人关注过本帖
标题:一个有意思的问题,也许用顺序表或链表实现很简单,但是要用单纯的数组实现 ...
只看楼主 加入收藏
goldAilie18
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2018-6-27
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:8 
一个有意思的问题,也许用顺序表或链表实现很简单,但是要用单纯的数组实现,逻辑关系却变得异常复杂。敢不敢来挑战一下

图片附件: 游客没有浏览图片的权限,请 登录注册
这里要求利用数组知识实现。仔细看输入和输出,就会大概知道做题框架,先定义两个操作,再调用,解决好输入和输出的关系,但实际写起来,头脑很乱。
谁能写出代码让我好好理一下拜托多一点注释噢?
如图不清,问题如下:
1、问题描述:
这里我们给线性表增加两个特殊的操作,第一个是‘R’ 操作,表示逆转整个表,如果表长为L,原来的第i个元素变成第L-i+1个元素。第二个操作是‘D’,表示删除表的第一个元素,如果表为空,则返回一个“error”信息。我们可以给出一系列的‘R’ 和‘D’组合,例如“RDD”表示先逆转表,然后删除最前面的两个元素。
本题的任务是给定表和一个操作串S,求出执行S后的表,如果中途出现‘D’操作于空表,输出“error”。
2、输入:
第一行是一个整数,表示有多少组数据。每组测试数据格式如下:
第二行是操作串S,有‘R’ 和‘D’组成,S的长度大于0,不超过100 000。
第三行是整数n,表示初始时表中的元素个数。n的值不小于0,不超过100 000。
第四行是包含n个元素的表,用‘[’ 和 ‘]’括起来,元素之间用逗号分开。各元素值在[1,100]之间。
3、输出:
 对于每一组测试数据,输出执行S后的表(格式要求同输入)或者“error”
输入输出样例图中应该能看清,不赘述。
集思广益中,有点儿急。谢谢



搜索更多相关主题的帖子: 输入 输出 操作 表示 元素 
2018-06-27 21:39
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:5 
修改操作模式
删除只做标记 ps标记有效数据开始和结束的位置
不修改数据

https://zh.
2018-06-27 22:04
goldAilie18
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2018-6-27
收藏
得分:0 
回复 2楼 lin5161678
???麻烦您再全面具体点儿?
2018-06-27 22:41
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
两个指针
一个指向数据开头
一个指向数据结尾
一个变量mode 表示位移方向 初始化为 1

遇到R就
交换数据开头和数据结尾
切换位移方向 mode = -mode;

遇到D
就执行1次
数据开头 += mode;

最后输入的时候
while(数据开头没到达就结尾)
  输出 数据开头
  数据开头 += mode;
就可以了

其他的什么输出[ 要不要输出逗号这种细节你再处理一下就完事了

https://zh.
2018-06-27 22:46
goldAilie18
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2018-6-27
收藏
得分:0 
回复 4楼 lin5161678
好的感谢您,虽然指针这块还没怎么接触,但是也应该要开始学了。不懂的地方可以再问您吗?或者您如果有时间把代码发我一下,我好好理解?谢谢
2018-06-28 08:58
goldAilie18
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2018-6-27
收藏
得分:0 
现在有点急
2018-06-28 09:00
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:5 
回复 楼主 goldAilie18
不用指针也行 ,用两个数组进行交换就行了

穷举是最暴力的美学
2018-06-28 10:13
goldAilie18
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2018-6-27
收藏
得分:0 
回复 7楼 nosnoy
可以麻烦您写下代码吗
2018-06-28 10:51
goldAilie18
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2018-6-27
收藏
得分:0 

#include<stdio.h>
int a[100001],i,N,L;
char b[100001],o;
int R(int a[i],int L)
{/*不同于题目,L表示数组长度,i表示数组第几个元素,N表示共有多少组数据,o表示字符串*/
    for (i=0;i<L;i++)
    a[L-i+1]=a[i];
    return 0;
}
/*定义一个D操作*/
int D(int a[i],int L)
{
    if (L==0)
        printf("error\n");
    else
    {
        for(i=0;i<L;i++)
        {
            a[i]=a[i+1];
            L--;
        }
    }
    return 0;
}
int main()
{
    scanf ("%d\n",&N);
    while (scanf("%d",&N)!=EOF)
    {
        scanf("%s",o);
        scanf("%d\n",&L);
        for (i=0;i<L;i++)
            scanf("%d\n",&a[i]);
        if(b[i]=='R')
            a[i]=R(a[i],L);
        else if(b[i]=='D')
            a[i]=D(a[i],L);
        else
            printf ("error\n");
        if(L>0)
        {
            for(i=0;i<L;i++)
            {
                printf ("%s",a[i]);
            }
        }
        else
            printf("error\n");
    }
    return 0;
}
还是有错误,望大神指点,修改。
2018-06-29 00:02
快速回复:一个有意思的问题,也许用顺序表或链表实现很简单,但是要用单纯的数组 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029125 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved