有数组a[0...n-1],其内容是无序的,另一数组b[0...m],其中n>m,现要求不准用其它数组,不准改变a[0...n]的内容,把a数组内最小的数放到b[0]中,把第二小的数放到b[1],依此类推
这是东莞东越饰的面试题目,我用了一个小时都没做出来,希望各位高手指点一二
foreach(int i in a)//对a中的每一个值
{
for(int j=0;j<b.length;j++)
{
if(i>=b[j]&&i<b[j+1])
{
insert(b,j+1,i);//向b中j+1位置插入i,这个函数可以自己写
}
}
}
public void insert(int[]b,int index,int value)
{
for(int i=b.length-1;i>=index;i--)
{
b[i]=b[i-1];//插入后向后移一位
}
b[index]=value;
}
一个面试题 求 n! (n的阶层)需要考虑溢出。
大家一起来写写程序
/*
本程序对给定的n(n<=100),计算出输出k!(k=1,2,...,n)的全部有效数字,因k!的值可能很大,故采用一维数组存储计算结果。设数组的每个元素存储k!的一位数字,并约定从低位到高位依次存于数组的第一个位置,第二个位置···。
程序中,计算k!采用对已求得的(k-1)!的结果连续加k-1次后求出,例如,4!=24,则计算5!对原来的24累加4次后得到120。为了控制累加的位数,另引入整型变量c用于记录当前(k-1)!的位数。
*/
#include <stdio.h>
#define MAXN 1000
int a[MAXN], b[MAXN];
void pnext(int k, int *cp)
{
int c = *cp, i, m, r;
for (i = 0; i < c; i++)
b[i] = a[i];
a[c] = 0;
for (m = 1; m < k; m++)
for (i = 0; i < c; i++) {
r = a[i] + b[i];
a[i] = r % 10;
a[i + 1] += r / 10;
}
r = a[c];
while (r > 0) {
a[c++] = r % 10;
r = r / 10;
}
*cp = c;
}
void write(int *a, int k, int c)
{
int i;
printf("%4d! = ", k);
for (i = c - 1; i >= 0; i--)
printf("%d", a[i]);
printf("/n/n");
}
main()
{
int n, c, k;
printf("Enter the number n(<=100):");
scanf("%d", &n);
a[0] = 1;
c = 1;
write(a, 1, c);
for (k = 2; k <= n; k++) {
pnext(k, &c);
write(a, k, c);
getchar();
}
}