当前位置: 代码迷 >> C语言 >> 数列换位
  详细解决方案

数列换位

热度:118   发布时间:2008-02-16 15:52:33.0
LS的LS兄弟代码不错不用精简.
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define M 50
move(a,m,n)
int a[],m,n;
{int i,j,t[M];
for(i=0;i<n;i++)
    t[i]=a[m+i];
for(;i<m+n;i++)
    t[i]=a[i-n];
for(i=0;i<m+n;i++)
    a[i]=t[i];
}
main()
{
  int m,n,i,a[M];
  printf("please input 'm' and 'n':");
  scanf("%d%d",&m,&n);
  for(i=0;i<m+n;i++)
      if(i<m)a[i]=2*i+1;
        else if(i==m) a[i]=2;
             else a[i]=a[i-1]+2;
  for(i=0;i<m+n;i++)
  printf("%3d",a[i]);
  move(a,m,n);
  printf("\n*******************************************************\n");
  for(i=0;i<m+n;i++)
  printf("%3d",a[i]);
----------------解决方案--------------------------------------------------------
贴上我的代码
我将LZ的问题修改了一下
1.将整数变成了字符
2.最后有几个字符也由用户自己决定输入
感觉这样才像一个函数,否则定死了就没什么用了

#include <stdio.h>
#include<string.h>

void testfunc(char *a, int step);

int main(void)
{
    char a[] = "abcdefghijkl";
    int i;

    printf("please input a num:");
    scanf("%d", &i);

    testfunc(a, i);
    printf("%s", a);
}

void testfunc(char *a, int step)
{
    int len;
    char temp1, temp2;
    int i = 0, j;

    len = strlen(a);
    if (step > len || step < 0)
    {
        printf("please input a right num"); /* 实际工程中这里应该返回一个错误类型由main函数处理 */
        return;
    }

    if (0 == len % step)
    {
        while (i < step)
        {
            j = i;
            temp1 = a[i];
            while (j< len)
            {
                temp2 = a[(j + step) % len];
                a[(j + step) % len] = temp1;
                temp1 = temp2;
                j += step;
            }
            i++;
        }
    }
    else
    {
        temp1 = a[0];
        while (i % len != 0 || i == 0)
        {
            temp2 = a[(i + step) % len];
            a[(i + step) % len] = temp1;
            temp1 = temp2;
            i += step;
        }
    }
}
----------------解决方案--------------------------------------------------------
这是我写的,
这是我花半天时间给写的,很简单,高手指点一下吧;
#include "stdio.h"
void print(int *);
main()
{
   int aa[20]={8,6,4,10,12,20,1,3,5,7,13,17},cc[20]={0};
   int i,j,*p1,*p2;
   p1=aa;
   p2=aa;
   
   if(aa[0]%2)//如果数组是以奇数开头
     {
       for(i=0;aa[i]%2&&aa[i];i++)
           p1++;
     
      for(i=0;*p1;p1++,i++)//偶数数据移入CC数组中
          cc[i]=*p1;
           
      for(;*p2%2;p2++)
       cc[i++]=*p2;
        print(cc);      
      }
   else
   {
     for(i=0;aa[i]%2==0&&aa[i];i++)
         p1++;
          for(i=0;*p1;p1++,i++)//奇数数据移入CC数组中
          cc[i]=*p1;
           
      for(;*p2%2==0;p2++)//偶数数据移入CC数组中
         cc[i++]=*p2;
      
        print(cc);//输出子函数      
            
   }
   
  
     
}

void print(int *array)
  {
    int i=0;
   
    for(;*array;array++)
       printf("%d ",*array);
   getch();               
   }
----------------解决方案--------------------------------------------------------
  相关解决方案