标题:数组处理奇特的艺术品问题
只看楼主
做梦追梦
Rank: 2
等 级:论坛游民
帖 子:22
专家分:28
注 册:2012-2-7
结帖率:100%
已结贴  问题点数:20 回复次数:8 
数组处理奇特的艺术品问题
Dr.Kong设计了一件艺术品,该艺术品由N个构件堆叠而成,N个构件从高到低按层编号依次为1,2,…,N。艺术品展出后,引起了强烈的反映。Dr.Kong观察到,人们尤其对作品的高端部分评价甚多。
狂热的Dr.Kong一激动,对组成该艺术品的N个构件重新组合,比如:把第6层到第12层的构件搬下来,想一想,然后整体放到剩下构件的第7层下面;过一会儿,又把第2层到第9层的构件搬下来,整体放到剩下构件的第1层下面等等。于是,Dr.Kong在进行了连续若干次“搬来搬去”后,还是这N个构件,又诞生了一件新的艺术品。
编程:请输出新的艺术品最高十层构件的编号。
【标准输入】
第一行: N K 表示构件的总数和“搬来搬去”的总次数
第2~K+1行:A B C 表示要搬动的构件(即从第A层到第B层)整个放在第C层下面;
如果C等于0,则要搬动的构件将放到最高层。
【标准输出】
由十行组成,分别为组成新艺术品的第一层到第十层构件的编号。
【约束条件】
(1) 10≤N≤20000 1≤k≤1000
(2) 1≤A≤B≤N, 0≤C≤N-(B-A+1)
搜索更多相关主题的帖子: 构件 
2012-06-12 10:52
做梦追梦
Rank: 2
等 级:论坛游民
帖 子:22
专家分:28
注 册:2012-2-7
得分:0 
#include<stdio.h>
int main()
{
int N,K,A,B,C;
int a[20000],b[20000];
int i,j;
scanf("%d%d\n",&N,&K);
for(i=0;i<=N;i++)
   a[i]=i;
if(j=1;j<=K;j++)
   {
   scanf("%d%d%d\n",&A,&B,&C);
 if(A>B) printf("enter data error:\n");return 0;
 if(A>C)
 {
    for(i=0;i<=B-A+1;i++)
    {
    a[B+1]=a[C+1];
    a[C+1]=b[i];
    C++;
    }
 }
 if(A<C)
     for(i=0;i<B-A+1;i++)
     {
     a[B+1]=a[C+1];
     a[C+1]=b[i];
     C--;
     }
     for(i=1;i<=N;i++)
         printf("%d",a[i]);
     return 0;
}
逻辑有点乱,哪位大神帮一下!!!
2012-06-12 10:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:7 
这个题目用链表处理更高效。

重剑无锋,大巧不工
2012-06-12 11:30
做梦追梦
Rank: 2
等 级:论坛游民
帖 子:22
专家分:28
注 册:2012-2-7
得分:0 
链表还没学习,难道用数组难度很大吗???
2012-06-12 11:32
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
难度不大,但耗时较多,恐怕提交时会超时。原题提交地址在哪?

重剑无锋,大巧不工
2012-06-12 11:36
做梦追梦
Rank: 2
等 级:论坛游民
帖 子:22
专家分:28
注 册:2012-2-7
得分:0 
zuomengzhuimeng@
2012-06-12 11:41
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
我要的是OJ地址,不是你的邮箱。

重剑无锋,大巧不工
2012-06-12 11:42
icysky
Rank: 5Rank: 5
来 自:心灵世界
等 级:职业侠客
威 望:1
帖 子:172
专家分:399
注 册:2011-5-17
得分:7 
if(j=1;j<=K;j++)
   {
   scanf("%d%d%d\n",&A,&B,&C);


没具体看    这个应该是for

不管怎么走、总有一个终点...
2012-06-12 12:00
做梦追梦
Rank: 2
等 级:论坛游民
帖 子:22
专家分:28
注 册:2012-2-7
得分:0 
#include<stdio.h>
int main()
{
int N,K,A,B,C;
int a[20000],b[2000];
int i,j=0,g,m,n;
scanf("%d%d\n",&N,&K);
for(i=0;i<=N;i++)
a[i]=i;
for(m=0;m<K;m++)
{scanf("%d%d%d",&A,&B,&C);
g=B-A+1;j=0;
for(i=A;i<=B;i++)
b[j++]=a[i];
if(A>C)
{
for(i=A-1;i>=C+1;i--)
a[i+g]=a[i];
for(n=C+1,g=0;n<=B-1;n++,g++)
  a[n]=b[g];
}
else
{
  for(i=B+1;i<=C;i++)
      a[i-g]=a[i];
  for(n=B+1,g=0;n<=C;n++,g++)
      a[n]=b[g];}}
  for(i=1;i<=10;i++)
      printf("%d",a[i]);
  return 0;
}
不知道什么是OJ地址,我弄好了。
2012-06-12 17:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371360-1-1.html




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

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