要求满足错误:
要求只用一个数组的方式实现,一定要保证在输出结果时,输出的顺序和数组中数的顺序是一致的。
#include<stdio.h>int main(){
int array[100]
int m, n, i,j, tmp, distance
scanf("%d%d", &n, &m)
for (i = 0 i < n ++i) //输入
scanf("%d", &array[i])
distance = n - m //尾部要替换过去的值之间地址相距n-m个元素.
for (i = distance i < n ++i){ //循环移动,每次移动一个。
tmp = array[i - distance]
array[i - distance] = array[i]
for (j = i j > i - distance --j){
array[j] = array[j - 1]
}
array[i - distance + 1] = tmp
}
for (i = 0 i < n ++i){ //输出
printf("%d", array[i])
if (i != n - 1)
printf(" ")
}
printf("\n")
return 0
}
#include<stdio.h>#define N 5
int main(){
int i,j,m,n,a[N][N]
printf("input m n:")
scanf("%d%d",&m,&n)
while(m>0)m-=N
while(n>0)n-=N
for(i=0i<Ni++)
for(j=0j<Nj++)
a[i][j]=i*N+j+1
for(i=0i<Ni++){
for(j=0j<Nj++)
printf("%-3d",a[(N-m+i)%N][(N-n+j)%N])
printf("\n")
}
return 0
}
input m n:1 1
25 21 22 23 24
5 1 2 3 4
10 6 7 8 9
15 11 12 13 14
20 16 17 18 19
因为是按8进制输入的,8进制的24换成10进制就是20,换成2进制就是00010100(以1字节表示)。而00010100循环右移2位后就是00000101,即10进制的5,而5按8进制输出(输出格式为%o),就是5。00010100循环左移2位后是01010000,用10进制表示就是80,而80按8进制输出(输出格式为%o),就是120。