标题:数列换位
只看楼主
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
/*楼上的楼上兄弟还有问题吗?*/ /*楼主并没有说不让用其它空间 只是说不让用两个数组*/
#include <stdio.h>
#include<stdlib.h>
int main()
{
  int a[15]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10};
  int i=0,j,temp=0;
  while(1)
  {
       if(i<5)
        {
            temp=a[i];
            a[i]=a[i+10];
            a[i+10]=temp;
         }
       else if(i>=5&&i<=10)
       {
            {
                 temp=a[i];
                 a[i]=a[i+5];
                 a[i+5]=temp;
            }
            if(i==10)break;
       }
       i++;
       if(i==10) break;
  }
  for(i=0;i<=14;i++)
     printf("%d ",a[i]);
  return 0;
}

[[it] 本帖最后由 xianshizhe111 于 2008-2-15 20:54 编辑 [/it]]
2008-02-15 20:52
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
得分:0 
唉~~以我的能力,只能用这种笨办法了。不过确实很管用,呵呵。

请诸位指点一二。

#include<stdio.h>
int main()
{
    int x[25]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10};
    int i,y;
    printf("您要转换的数组为:\n");
    for(i=0;i<15;i++)
        printf("%3d",x[i]);
    puts(" ");
    for(i=0;i<10;i++)
    {
          y=x[i];
          x[i]=x[i+15];
          x[i+15]=y;
    }
    printf("转换后为:\n");
    for(i=10;i<25;i++)
          printf("%3d",x[i]);
    puts(" ");




    getch();
}
2008-02-15 22:31
aprogram
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-15
得分:0 
回复xianshizhe111
你那个程序还是有很大的局限性,就是必须奇数个数是偶数个数的倍数

我认为这个问题其实就是将整个数组向后移动偶数个数。
所以应该是
temp1 = a[i]
temp2 = a[i+5]
a[i+5] = temp1;
temp1 = temp2

不过还应该分2种情况 1)总个数是偶数的倍数,2)总个数不是偶数的倍数

因为我有事不能写源代码,只给一个思路供大家参考

学C语言多年,如今才知道一事无成
2008-02-16 14:42
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
我还可以优化一些(但是与你的要求还差很多)
还是敲个代码吧?
做一下参考我还能进步一点.谢谢.
2008-02-16 14:51
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
/*不知可否满意*/
#include <stdio.h>
int main()
{
    int a[15]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10};
    int i=0,temp=0,swap;
    for(i=0;i<5;i++)
    {   temp=a[i];            
        a[i]=a[i+10];
        a[i+10]=temp;
        swap=a[i+5];
        a[i+5]=a[i+10];
        a[i+10]=swap;
     }   
    for(i=0;i<5;i++)
        printf("%d %d %d ",a[i*3],a[i*3+1],a[i*3+2]); /*这在加个三段击*/
    return 0;
}
2008-02-16 15:06
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
#include <stdio.h>

int main(void)
{
    int i, temp;
    int ar[15]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10};
   
    while(ar[0] % 2 != 0)
    {
        temp = ar[0];
        for(i = 1; i < 15; i++)
        {
            ar[i - 1] = ar[i];
        }
        ar[14] = temp;   /* 14 即数组的最后元素 */
    }

    for(i = 0; i < 15; i++)   /* 显示数组内容 */
        printf("%d ", ar[i]);

    getchar();
    return 0;
}

—>〉Sun〈<—
2008-02-16 15:25
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
我再优化一些就达到你的要求了.
2008-02-16 15:27
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
回复 13# 的帖子
楼上的兄弟思路很好啊,有更好的想法可以自己写啊.刚好锻炼自己啊
2008-02-16 15:32
zhaoruiqi1975
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-1-23
得分:0 
#include <stdio.h>
#define M 50
move(a,m,n)
 int a[],m,n;
{int i,t,j,*p;
 p=a;
 for(i=0;i<n;i++)
    {p+=m;
     t=*p;
     for(j=0;j<m;j++)
         *p--=*(p-1);
     a[i]=t;
     p++;
     }
}
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]);
}
初学,高手精简。
2008-02-16 15:45
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
是啊!
兄弟理解我啊!
2008-02-16 15:46



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




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

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