当前位置: 代码迷 >> C语言 >> 编码问题?帮忙看看::鄙人较愚望高人指点呐!!!
  详细解决方案

编码问题?帮忙看看::鄙人较愚望高人指点呐!!!

热度:414   发布时间:2007-12-14 18:46:25.0
编码问题?帮忙看看::鄙人较愚望高人指点呐!!!
设有一个整形数组 A[0..N-1];存放的元素为 0~N-1 (1<N<=10)之间的整数,且 A[i]≠A[j](i≠j)。例如,当N=6时,有:A=(4,3,0,5,1,2)。此时,数组A的编码定义如下:
    A[0]编码为0;
    A[i]编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数 (i=1,2,…,N-1)
    例如上面数组 A的编码为:B=(0,0,0,3,1,2)
若给出数组A,则可求出其编码。同理,若给出数组A的编码,可求出A中的原数据。

输入:
    推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组)
    数组个数
    数组或数组编码元素
输出:
    数组编码、或数组本身(元素之间以空格分隔)
例子1输入  1                                    输出              例子2输入2                              输出
                       6                                                                                          6
                       4 3 0 5 1 2                             0 0 0 3 1 2                          0 0 0 3 1 2                       4 3 0 5 1 2

main
{int m,n,i,j,count=0,c[20],a[20];   int static b[20]={0};
   scanf("%d\n%d",&m,&n);
       for(i=0;i<n;i++)
        scanf("%d",a[i]);
          for(i=0;i<n;i++)
               b[i]=i;
if(m==1)
  {
        for(i=0;i<2*n-1;i+=2)
          for(j=i+2;j<2*n-1;j+=2)
            {if(a[i]>a[j])
               b[i]++;}
              for(i=0;i<2*n-1;i++)
                 printf("%d",b[i]);
   }
if(m==2)
   {
        b[a[n-1]]=10; c[n-1]=a[n-1];
             for(i=n-2;i=n-2;i--)
              {  for(j=0;j<n;j++)
                   if(b[j]>=0&&b[j]<=9)
                       {  count++;
                          if(count==a[n-2])
                          {c[n-2]=b[j]; b[j]=10;}
                          else  continue;
                        }
                    n=n-1;
                }
     }
     for(i=0;i<n;i++)    printf("%d",c[i]);
}
搜索更多相关的解决方案: 鄙人  高人  编码  

----------------解决方案--------------------------------------------------------
算法很烂 N个For
#include "stdio.h"
main()
{int m,n,i,j,k,l,count=0,c[20],a[20];
int static b[20]={0};
clrscr();
   scanf("%d %d",&m,&n);
       for(i=0;i<n;i++)
    scanf("%d",&a[i]);

if(m==1)
  {
        for(i=1;i<n;i++)
          for(j=0;j<i;j++)
            {if(a[i]>a[j])
               b[i]++;}
              for(i=0;i<n;i++)
                 printf("%d",b[i]);
   }
if(m==2)
   {
    for(i=0;i<n;i++)
    b[i]=i;
    for(i=n-1;i>=0;i--)
      for(j=i;j>=0;j--)
       {for(k=j-1,count=0;k>=0;k--)
      if(b[j]>b[k]) count++;
      if(count==a[i])
      {
      c[i]=b[j];
      for(l=j;l<i;l++)
      b[l]=b[l+1];
      }
       }
     for(i=0;i<n;i++)    printf("%d ",c[i]);
     }
      getch();
}

[[italic] 本帖最后由 VanGogh 于 2007-12-15 15:20 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
路过。。。。。。。。。。。。
----------------解决方案--------------------------------------------------------
吃完饭写了第二个的 试试吧 在一楼
----------------解决方案--------------------------------------------------------
用一个简易的线段树或者树状数组可以把算法复杂度降至O(nlogn)
----------------解决方案--------------------------------------------------------
求教一个C语言的问题!拜托!!!
你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下:

1
2
6
7
15

3
5
8
14
16

4
9
13
17
22

10
12
18
21
23

11
19
20
24
25



学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。

输入:
    方阵N的大小。

输出
    方阵。
----------------解决方案--------------------------------------------------------
  相关解决方案