数组循环右移

流程图

核心代码

- //主要找规律,一圈一循环
```for (l = 0; l < n / 2+1; l++) {//循环的次数,注意奇数和偶数
    ```if (n % 2 != 0 && l == (n / 2 )) {
        a[l][l] = ++b;//奇数的最后一趟只有一个数需要赋值,而偶数最后还是一个小正方形
    }//利用flag标记每次循环行列的规律
    for (i = l; i < flag; i++) {
        a[l][i] = ++b;//i为列数
    }
    for (k = l; k < flag; k++) {
        a[k][i] = ++b;//k为行数
    }
    for (t = i; t > l; t--) {
        a[k][t] = ++b;//n-
    }
    for (m = k; m > l; m--) {
        a[m][t] = ++b;
    }
    flag -= 1;//规律
}

数组循环右移

从这两个方法理解时间换空间,空间换时间//不知道理解的对不对
n为s数组长度,m为右移的数
m=m%n; ##方法一:找规律,浪费空间 b[]与a[]数组元素一样 for(i=0;i<n;i++)a[(i+m)%n]=b[i];//需要重开一个数组,浪费空间,否则会出现元素覆盖; ##方法二:暴力,浪费时间 for(i=0;i<m;i++){ int temp=a[n-1]; for(j=n-1;j>=1;j--)a[j]=a[j-1]; a[0]=temp; } 二维数组同理右移·左移同理 #近期知识点 ···跟指针有关的一定要先初始化或者复制 才能进行输入、四则运算,否则会出现访问内存冲突; for examplechar p[4][20];
for(i=0;i<4;i++)scanf("%s",p[i]);/*但如果定义为char p[4],就不行,因为此时系统并未指针分配内存/
···空串 a="\0";
···进制转换注意-'0'或者-'a';
···一旦指针错误,很容易出现段错误

12-18 19:32
查看更多