携程
移动数组里的0
给定一个整型数组,将数组中的所有0移动到末尾,非0项保持顺序不变。(在原始数组上进行操作)
输入
第一行是数组的长度
后续每一行是数组的一条记录
输出
调整后的数组内容
solution:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num, i, j, k;
int *p;
int tmp;
scanf("%d", &num);
p = (int *)malloc(num*sizeof(int));
for(i = 0, j = 0, k = num-1; i<num; i++) {
scanf("%d", &tmp);
if(tmp != 0) {
p[j++] = tmp;
} else {
p[k--] = tmp;
}
}
for(i = 0; i<num; i++) {
printf("%d ", p[i]);
}
printf("
");
return 0;
}
result:
4
0
7
0
2
7 2 0 0
Press any key to continue.
二维数组旋转
题目
给定一个N*N的矩阵,将该矩阵顺时针旋转90度
输入
一个N*N二维数组
输出
将输入的二维数组顺时针旋转90度
solution:
#include <stdio.h>
#include <stdlib.h>
int getline_(char s[],int lim){
int c,i;
i=0;
while((c=getchar())!=EOF&&c!='
'&&i<lim-1)
s[i++]=c;
s[i]=' ';
return i;
}
int main(int argc, char **argv)
{
int N = 0;
int i, j=0, k, i0;
char p[100];
int *p1, *p2;
i = i0 = getline_(p,100);
for(;i0>=0;i0--) {
if(p[i0]>='0' && p[i0]<='9') {
N++;
}
}
p1 = (int *)malloc(N*N*sizeof(int));
p2 = (int *)malloc(N*N*sizeof(int));
for(j = 0,k = 0;k<i;k++) {
if(p[k]>='0' && p[k]<='9') {
p1[j++] = (int)p[k]-'0';
}
}
for(i = N; i<N*N; i++) {
scanf("%d", p1+i);
}
for(i = 0; i<N*N; i++) {
//顺时针旋转90度:p[i][j]=p[j][N-1-i] ,i从0开始
p2[i%N*N+N-1-i/N] = p1[i];
}
for(i = 0; i<N*N; i++) {
if(i%N == 0){
printf("
");
}
printf("%d ", p2[i]);
}
return 0;
}
result:
1 4 7
2 5 8
3 6 9
3 2 1
6 5 4
9 8 7
Press any key to continue.