银行编程题——算法(C,python)

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.背包问题

你可能感兴趣的:(银行编程题——算法(C,python))