1、判断回文数
【功能】:判断一个数是否回文数,如1221,232, 3;
【输入】:一个整型数iNumber
【输出】: 0:iNumber不是回文数
1:iNumber是回文数
int isPlalindromeNumber(int iNumber)
{
int tempInt=iNumber;
int reverseInt=0;
while(tempInt)
{
reverseInt=reverseInt*10+tempInt%10;
tempInt/=10;
}
if(reverseInt==iNumber)
return 1;
else
return 0;
}
2、问题描述: 比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数比如:数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0;数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3。
• 要求实现函数:int array_compare(int len1, int array1[], int len2, int array2[])
【输入】int len1:输入被比较数组1的元素个数;
int array1[]:输入被比较数组1;
int len2:输入被比较数组2的元素个数;
int array2[]:输入被比较数组2;
【输出】 无
【返回】 不相等元素的个数,类型为int
示例 1) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0
2) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3
int array_compare(int len1, int array1[], int len2, int array2[])
{
int len3,count=0;
if (len1<len2)
len3=len1;
else
len3=len2;
for(int i=0;i<len3;i++)
if(array1[len1-1-i]!=array2[len2-1-i])
count++;
return count;
}
3.问题描述:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[]数组中间两个位置偏右的那个位置上,然后按从打到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
要求实现函数:sort(int input[],int n,int output[])
【输入】input[]
【输出】 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}
先通过快速排序就地对input进行排序
int Partition(int A[],int p,int r)
{
int i=p-1;
int temp;
for(int j=p;j<r;j++)
{
if(A[j]<A[r])
{
i++;
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
temp=A[i+1];
A[i+1]=A[r];
A[r]=temp;
return i+1;
}
void QuickSort(int A[],int p,int r)
{
if(p<r)
{
int q=Partition(A,p,r);
QuickSort(A,p,q-1);
QuickSort(A,q+1,r);
}
}
void sort(int input[],int n,int output[])
{
QuickSort(input,0,n-1);
output[n/2]=input[n-1];
int i=n/2-1;
int j=n/2+1;
for(int k=1;k<n;k++)
{
if(k%2==1)
output[i--]=input[n-1-k];
else
output[j++]=input[n-1-k];
}
}
3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。
例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}
函数接口 void scheduler(int task[], int n, int system_task[], int user_task[])
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int array[256];
for(int i=0;i<n;i++)
{
array[task[i]]=i;
}
QuickSort(task,0,n-1);
int j=0,k=0;
for(i=0;i<n;i++)
{
if(task[i]<50)
system_task[j++]=array[task[i]];
else
user_task[k++]=array[task[i]];
}
system_task[j]=-1;
user_task[k]=-1;
}