zoj 1201

本文介绍了一种将数组i转换为数组p的算法实现细节。重点讨论了如何处理数组中的0和非0元素,并通过示例代码展示了遍历与填充的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1      由i转换为p时,注意数组中0的出现有两种情况,一个是就是第一位,另一个前面的数字均小于它,
         不过处理的时候都一样,都是找到第一个空格时,遍历就停止;
2    由i转换为p时,更要注意数组中不为0的数字,例如a数组中第二个元素是3,相当于把2填在b数组时,
      2所在的位置前面有3个空格,但是除了空格也可能有已经填好的数字,比如1就在2的前面,
       当空格数与a数组中元素相等时,停止遍历,2在b数组中所在的位置k=空格数+已经填好的数的个数+1,
       但是要注意k位置上是否已经填充了,如果填充了,就要往后继续遍历直到找到空格为止

代码如下#include<stdio.h>
int main()
{
  int a[51],b[51],i,j,count,space,n,k;
  char d;
 scanf("%d",&n);
while(n)
{
  getchar();
  scanf("%c",&d);
  for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
  for(i=1;i<=n;i++)
     b[i]=0;
if(d=='I')
{
  for(j=1;j<=n;j++)
  {
    count=0;
    space=0;
    for(i=1;i<=n;i++)
      {
       if(a[j]==0)
       {
         if(b[i]==0)
           {
             space++;
              b[count+space]=j;
             break;        
           }
          else
            count++;        
       }
       else
       {
         if(b[i]==0)
          space++;
         else
           count++;
         if(space==a[j])
         {
           
           break;  
         }
           
       }             
                    
  }
if(a[j])
{
  k=count+space+1;
  while(b[k])
    k++;
  b[k]=j;
}
                 
}
}
else
{
  for(j=1;j<=n;j++)
   {
    count=0;
    for(i=1;i<=n;i++)
    {
      if(a[i]>j)
       count++;
      if(a[i]==j)
       break;               
    }
    b[j]=count;              
   }  
   
 
}


for(i=1;i<n;i++)
 printf("%d ",b[i]);
 printf("%d",b[n]);
 printf("\n");


 scanf("%d",&n); 
}

  getchar();
  getchar();
  return 0; 
  
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值