本人的c语言不太好,一道题目求答案
设有一数列,包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)
[解决办法]
int fun(int a[], unsigned int start, unsigned int n){ int tmp; int i; for (i = 0; i < n; i++) { tmp = a[start + n - 2 - i]; a[start + n - 2 - i] = a[start - 1 + i ]; a[start - 1 + i] = tmp; } return 0;}
[解决办法]
这个无非就是指针的偏移数问题,比如需要把第四个开始后的5个逆序,输入为 4 5
那么在1-4直接输出,然后把指针只想a+4+4-2处,倒这输出,完成之后再输出最后一部分
1 #include<stdio.h> 2 3 int main(){ 4 5 int begin,end,*p; 6 7 int a[] = {2,4,6,8,10,12,14,16,18,20}; 8 9 scanf("%d %d",&begin,&end); 10 p = a; 11 while(p<=a+begin-2) 12 printf("%d ",*p++); 13 p = a+begin+end-2; 14 while(p>=a+begin-1) 15 printf("%d ",*p--); 16 p = a+begin+end-1; 17 while(p<a+sizeof(a)/sizeof(int)) 18 printf("%d ",*p++); 19 printf("\n"); 20 return 0; 21 }
[解决办法]
#include <stdio.h>void local_sort(int *a,int pos,int len){ int i; for(i=0;i<len>>1;++i) { a[pos+i]^=a[pos+len-i]; a[pos+len-i]^=a[pos+i]; a[pos+i]^=a[pos+len-i]; }} int main(void){ int array[10]={2,4,6,8,10,12,14,16,18,20}; int i; local_sort(array,3,5); for(i=0;i!=10;++i) printf("%d ",array[i]); getchar(); return 0;}