焦糖橙子 发表于 2023-2-23 10:56:34

关于一维数组的问题

有n个整数,现在将前面各数顺序向后移m个位置,最后m个数变成最前面m个数,并输出。(编程提示:定义函数,实现每次数组往后移动一个元素,最后一个放到数组前面,这样调用m次即实现数组后移m个数。

emmm不知道哪里出错了裂开了,有没有小伙伴帮一下,感谢{:10_266:}

#include"stdio.h"

void move(int,int,int);

int main()
{
        int number, n, i ,m;
       
        printf("请输入初始数组长度:");
        scanf("%d",&n);
       
        printf("请输入%d个数字:",n);       
        for(i = 0; i < n; i++)
        {
                scanf("%d",&number);
        }
       
        printf("请输入移动的次数:");
        scanf("%d",&m);
       
        move(number,n,m);

        for(i = 0; i < n; i++)
        {
                printf(" %d ",number);
        }
        return 0;

}

void move(int number,int n,int m)
{
        while(m >= n);
        {
                m -= n;
        }
       
        int temp, i, j;
        for(i = 0 ; i < m ; i++)
        {
                temp = number;
                for (j = n-1 ; j >=0 ; j--)
                {
                        number = number;
                }
                number = temp;
        }
       
                for(i = 0; i < n; i++)
        {
                printf(" %d ",number);
        }
        printf("\n");
}

焦糖橙子 发表于 2023-2-23 11:17:57

void move(int number,int n,int m)
{
        while(m >= n)
        {
                m -= n;
        }
       
        int temp, i, j;
       
        for(i = 0;i < m;i++)
        {
                temp = number;
                for (j = n-1;j>=1;j--)
                {
                        number = number;
                }
                number = temp;
        }
}


发现了最后的move函数写错了

ExiaGN001 发表于 2023-2-24 17:10:46

move函数里有个while写错了,while最后不应该加分号。
另:将while函数换成m=m%n效率会更高

dolly_yos2 发表于 2023-2-24 17:57:55

一些有趣做法#include <stdio.h>
void reverse(int* array, size_t start, size_t end){
    int temporary;
    while(start < --end){
      temporary = array;
      array = array;
      array = temporary;
    }
}
int main(){
    int number, n, i ,m;
    printf("请输入初始数组长度:");
    scanf("%d",&n);
    printf("请输入%d个数字:",n);      
    for(i = 0; i < n; i++) scanf("%d",&number);
    printf("请输入移动的次数:");
    scanf("%d",&m);
    m %= n;
    reverse(number, 0, n);
    reverse(number, 0, m);
    reverse(number, m, n);
    for(i = 0; i < n; i++) printf(" %d ",number);
    return 0;
}
页: [1]
查看完整版本: 关于一维数组的问题