C语言考试题
#define SUM(a,b,c)a*b+c
main()
{
int i = 1,j=2,k =3;
printf("%o\n",SUM(i+j,j+k,i+k));
}
//1+2*2+3+1+3 = 12 转成八进制 14
1.反转链表
2.找链表中点
3.找环
1.快排
void quickarray(int s[], int l, int r)
{
if (l < r)
{
int i = l, j = r;
int x = s[l]; //s[l]即s[i]就是第一个坑
while (i < j)
{
// 从右向左找小于x的数来填s[i]
while (i < j && s[j] >= x)
j--;
if (i < j)
{
s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
i++;
}
// 从左向右找大于或等于x的数来填s[j]
while (i < j && s[i] < x)
i++;
if (i < j)
{
s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
j--;
}
}
s[i] = x;
quickarray(s, l, i - 1); // 递归调用
quickarray(s, i + 1, r);
}
}
//退出时,i等于j。将x填到这个坑中。
int main (void)
{
int i;
int s[] = { 72,6,57,88,60,42,83,73,48,85 };
quickarray(s, 0, 9);
for (i = 0; i < 9; i++)
{
printf("%d\t", s[i]);
}
system("pause");
return 0;
}
2.冒泡
void bubble_sort(int a[],int n)
{
int i,j,temp;
for (i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
}
3.选择
void select_sort(int a[],int n)
{
int i,j,min_index,tmp;
for (i=0;i<n-1;i++)
{
min_index = i;
for (j=i+1;j<n;j++)
{
if(a[j]<a[min_index])
{
min_index = j;
}
}
tmp = a[min_index];
a[min_index] = a[i];
a[i] = tmp;
}
}
4.插入(我理解的困难一点,其实也还好)
void insert_sort(int a[],int n)
{
int i,j,temp;
for (i=1;i<n;i++)
{
temp = a[i];
j=i-1;
while(j>=0&&temp<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
}
5.堆排序
1.剪绳子
int max_Cut(int length)
{
int i,j,a;
if (length <2)
return 0;
else if(length==2)
return 1;
else if (length==3)
return 2;
else
{
int *products = (int*) malloc(sizeof(int));
products[0]=0;
products[1]=1;
products[2]=2;
products[3]=3;
int product;
for(i=4;i<=length;i++)
{
int max=0;
for (j=1;j<=i/2;j++)
{
product = products[j] * products[i-j];
if(max<product)
{
max = product;
}
products[i]=max;
}
}
a=products[length];
return a;
}
}
2.硬币组合
int min_coin(int money)
{
int i;
if (money ==1)
return 1;
else if(money==2)
return 2;
else if (money==3)
return 1;
else if(money==4)
return 2;
else if(money==5)
return 1;
else
{
int H[3] = {1,3,5};//注意数组建立的写法
int min;
min = money;
for(i=0;i<3;i++)
{
int con = min_coin(money-H[i])+1;
if (min>con)
{
min=con;
}
}
return min;
}
}
int main()
{
int money,a;
scanf("%d",&money);
a = min_coin(money);
printf("%d",a);
return 0;
}
3.背包问题