今天就写俩程序,大数相乘和这个数组的重排序,这里还遇到一个问题,老板讲过的literal pool的问题,面试完以后再来看看
明天去华为机试了 ,good luck . ^_^
-
/***************************************
-
给定一个数组input[],
-
如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置,
-
如果数组长度n为偶数,则将数组中最大的元素放到output[]数组中间两个位置偏右的那个位置上,
-
然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
-
例如: input[] = {3,6,1,9,7} output[] = {3,7,9,6,1};
-
input[] = {3,6,1,9,7,8} output[] = {1,6,8,9,7,3}
-
-
*****************************************/
-
-
/*
-
void resort(char *input, char *output);
-
*/
-
-
#include<stdio.h>
-
#include<string.h>
-
-
void swap(char *p1, char *p2)
-
{
-
char tmp;
-
tmp = *p1;
-
*p1 = *p2;
-
*p2 = tmp;
-
}
-
void resort_array(char *input, char *output)
-
{
-
int len, i, min, j, result;
-
char *input_b;
-
-
len = strlen(input);
-
-
input_b = malloc(sizeof(char)*(len+1));
-
-
strcpy(input_b,input);
-
-
result = len / 2;
-
-
-
for(i = 0;i < len -1; i++)
-
{
-
min = i;
-
-
for(j = i+1; j < len; j++)
-
if(input_b[j] < input_b[min])
-
min = j;
-
if(min != i)
-
swap(&input_b[min], &input_b[i]);
-
}
-
-
output[result] = input_b[len-1];
-
-
for(i = 0, j = 1; i < len - 1 ; i++)
-
{
-
output[result-j] = input_b[len-1-i-1];
-
i++;
-
j *= -1;
-
output[result-j] = input_b[len-1-i-1];
-
j *= -1;
-
j++;
-
}
-
-
output[len] = '\0';
-
}
-
-
int main(int argc, char**argv)
-
{
-
char *p1 = "230165";
-
char p2[10] = {0};
-
-
resort_array(p1, p2);
-
printf("result = %s",p2);
-
while(1);
-
}
阅读(1088) | 评论(0) | 转发(0) |