1008 数组元素循环右移问题 (用C语言精简的解决每日两题)

1008 数组元素循环右移问题 (用C语言精简的解决每日两题)_第1张图片
先放一个投机取巧的方法:
直接打印就行了,我才不移动

#include
#include
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    int nums[n];
    for(int i=0;i<n;i++){
        scanf("%d",&nums[i]);
    }
    int flag=n-(m%n); //先打印的那个数字下标,因为m可能大于n所以要取余
    for(int i=flag;i<n;i++){ //先打印flag数字和他后面的
        printf("%d ",nums[i]);
    }
    for(int i=0;i<flag-1;i++){ //再打印前面的
        printf("%d ",nums[i]);
    }
    printf("%d",nums[flag-1]); //最后一个不能带空格
return 0;
}

再放一个尝试的第二个方法:
因为看那个1 2 3 4 5 6变成5 6 1 2 3 4
不就是把5 6 连在一起,1 2 3 4 连在一起,然后把56放在1234前面嘛
所以我就想着用字符串操作

int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    char nums[n];   //定义成字符数组,这也是测试点为啥不能全过的原因
    m=m%n;  //m可能大于n
    for(int i=0;i<n;i++){
        scanf(" %c",&nums[i]); //小心多次scanf字符的陷阱
    }
    char *pre=(char *)malloc((sizeof(char))*(n-m));
    strncpy(pre,nums,n-m);   //以样例,pre用来指向1234 nums:1 2 3 4 5 6
    strncpy(nums,nums+n-m,m); //然后把56放到12的位置 nums:5 6 3 4 5 6
    strcpy(nums+m,pre);//再把1234放到3456的位置 nums:5 6 1 2 3 4
    for(int i=0;i<n-1;i++)
        printf("%c ",nums[i]);
    printf("%c",nums[n-1]);
}

编程的时候遇到的一个问题是,我发现nums这个输入有问题,才想起来多次scanf %c会把回车也弄进去,所以要每次应该要清空缓冲区,有两种方式:scanf(" %c",&nums[i]);在%c前面加空格;或者scanf("%c",&nums[i]);getchar();在scanf后面加上getchar()
到此,提交到pta发现有两个测试点错误,思考良久,才想起来它有可能输入大于10的数,这样存储在数组里的时候只会存储第一位…

第三个方法就是最尝龟的了:
把前面和后面各自反转:1 2 3 4 5 6 -》 4 3 2 1 6 5
然后再总体反转:4 3 2 1 6 5 -》 5 6 1 2 3 4

void reverse(int nums[],int begin,int end){  //先写一个反转函数
    int mid=(begin+end)/2;
    for(int i=begin;i<=mid;i++){
        int temp=nums[i];
        nums[i]=nums[end+begin-i];
        nums[end+begin-i]=temp;
    }
}

int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    int nums[n];
    m%=n;
    for(int i=0;i<n;i++)
        scanf("%d",&nums[i]);
    reverse(nums,0,n-m-1); //反转前半部分
    reverse(nums,n-m,n-1);   //反转后半部分
    reverse(nums,0,n-1);  //反转总体
    printf("%d",nums[0]);
    for(int i=1;i<n;i++)
        printf(" %d",nums[i]);
return 0;
}

1.注意多次输入字符的问题

2.反转的时候比较绕,最好是代数进去验证

你可能感兴趣的:(PTA,c语言,算法,数据结构)