首页 > 试题广场 >

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前

[问答题]

n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见

8.43。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。要求用指针方法处理。


推荐

#include<stdio.h>

int main()

{void move(int [20],int,int);

int number[20],n,m,i;

printf("how many numbers?");

scanf("%d",&n);

printf("input %d numbers:\n",n);

for(i=0;i<n;i++)

scanf("%d”,&number[i]);

printf("how many place you want move?");

scanf("%d”,&m);

move(number,n,m);

printf("Now,they are:\n");

for(i=0;i<n;i++)

printf("%d  ",number[i]);

printf("\n");

return 0;

}


void move(int array[20],int n,int m)

{int *p,array _end;

array_end=*(array+n-1);

for(p=array+n- 1;p>array;p--)

*p=*(p-1);

*array=array_end;

m--;

if(m>0)move(array,n,m);

}


发表于 2018-03-25 10:31:50 回复(1)
#include <stdio.h>
int main()
{
	int a[20], b[20];
	int i, n, m;
	printf("整数的个数n:");
	scanf("%d", &n);
	printf("输入%d个数:", n);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}

	printf("输入偏移量m:");
	scanf("%d", &m);
	for(i = 0; i <= n - m - 1; i++) //将数组的前n-m个数(下标0到n-m-1)后移m位存到b数组
		b[i + m] = a[i];
	for (i = 0; i <= m - 1; i++)  //将数组的后m个数(下标n-m到n-1)前移n-m位存到b数组
		b[i] = a[i + n - m];

	for (i = 0; i < n; i++)
	{
		printf("%d ", b[i]);
	}
	
}

发表于 2023-03-22 23:05:17 回复(0)
链接:https://www.nowcoder.com/questionTerminal/d12b87e382d24946a4b4e7b817f0a072
来源:牛客网

#include<stdio.h>
int main()
{
    int a[1000]={0},*p,i,j,m,n,temp;
    printf("输入整数的个数n:");
    scanf("%d",&n);
    printf("输入n个整数:");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("输入要移动整数的个数m:");
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        p=a+n-m+i;
        for(j=n-m-1+i;j>=0+i;j--)
        {
            temp=*p;
            *p=a[j];
            a[j]=temp;
            p--;
        }
    }
        for(i=0;i<n;i++)
        {
            printf("%3d",a[i]);
        }
        return 0;
}
发表于 2021-12-19 13:27:45 回复(0)
#include<stdio.h>
int main()
{
    int a[1000]={0},*p,i,j,m,n,temp;
    printf("输入整数的个数n:");
    scanf("%d",&n);
    printf("输入n个整数:");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("输入要移动整数的个数m:");
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        p=a+n-m+i;
        for(j=n-m-1+i;j>=0+i;j--)
        {
            temp=*p;
            *p=a[j];
            a[j]=temp;
            p--;
        }
    }
        for(i=0;i<n;i++)
        {
            printf("%3d",a[i]);
        }
        return 0;
}
发表于 2021-07-07 17:16:21 回复(0)
#include <stdio.h>
#include <stdlib.h>
int * move_group(int * original, int all_len, int move_len){
 int * result = malloc(sizeof(int) * all_len);
 for(int i = 0; i < move_len ;i ++){
  * (result + i) = * (original + all_len - move_len + i);
 }
 for(int i = 0; i < all_len - move_len; i ++){
  * (result + move_len + i) = * (original + i);
 }
 * (result + all_len) = 0;
 return result;
}
int main(){
 int move;
 scanf("%d", &move);
 int total;
 scanf("%d", &total);
 int * original = malloc(sizeof(int) * total);
 for(int i = 0; i < total; i ++){
  scanf("%d", original + i);
 }
 int* res = move_group(original, total, move);
 for(int i = 0; i < total; i ++){
  printf("%d ", * (res + i));
 }
 printf("\n");
}
发表于 2020-01-02 17:04:05 回复(0)
/*在数组中移动元素的位置,利用到指针,同时还复习到函数的递归调用*/
void move(int array [20],int m,int n)
{
int array_end,*p;
array_end=array[n-1];
for(p=array+n-1;p<array+n-m-1;p--)
*p=*(p-1);
array=array_end;
m--;
if(m>0)
move(array[20],n,m);
}
发表于 2018-05-20 22:07:50 回复(0)