c语言算法例题

1. 10 进制数的2次幂表示

比如 137 = 2(2(2)+2+2(0))+2(2+2(0))+2(0)
int get_two(int two){
	int two = 1;
	while(num / two != 0){
		two *= 2;
	}
	if(two != 1){
		two /= 2;
	}
}
int get_var(int num){
	int var = 0;
	int two = 1;
	while(num / two != 0){
		two *= 2;
		var++;
	}
	if(two != 1){
		two /= 2;
		var--;
	}
	return var;
}

void fun(int num){
	if(num == 1 || num == 2 || num ==0){
		printf("%d",num);
		return;
	}
	do{
		if(num / get_two(num) == 1){
			printf("2(");
			fun(get_var(num));
			printf(")");
			if(num - get_two(num) != 0){
				printf("+");
			}
		}
		num -= get_two(num);
	}while(num != 0);
}

归并排序

void merge_sort(int *p_arr,int l,int h){
	int mid;
	if(l == h){
		return;
	}else{
		mid = (1 + h) / 2;
		merge_sort(p_arr,l,mid);
		merge_sort(p_arr,mid + 1,h);
		merget_result(p_arr,1,mid,h);
	}
}
void merge_result(int *p_arr,int l,int mid,int h){
	int temp[h - l + 1];
	int i,j;
	int k;
	i = j = k = 0;
	while(i < (mid - l + 1) && j < (h - mid)){
		if(*(p_arr + l + i) < * (p_arr + mid + 1 + j)){
			temp[k++] = *(p_arr + l + i++);
		}else{
			temp[k++] = *(p_arr + mid + 1 + j++);
		}
	}
	while(i < (mid - l + 1)){
		temp[k++] = *(p_arr + l + i++);
	}
	while(j < (h - mid)){
		temp[k++] = *(p_arr + mid + 1 + j++);	
	}
	for(k = 0;k < (h - l + 1);k++){
		*(p_arr + l + k) = temp[k];
	}
}

十进制 转化

void ten_to_eig(int num){
	if(num / 8 == 0){
		printf("%d",num % 8); // 打印
		return;
	}
	ten_to_eig(num / 8);
	printf("%d",num % 8); // 打印
}

int ten_2_eig(int num){
	if(num / 8 == 0){
		return num % 8;
	}
	return (num % 8) + ten_2_eig(num / 8) * 10;
}

杨辉三角

void triangle_yanghui(int num){
	int r;
	int c;
	int arr[num][num];
	
	for(r = 0;r < num;r++){
		for(c = 0;c <= r;c++){
			if(c == 0){
				arr[r][0] = 1;
			}else if(){
				arr[r][r] = 1;
			}else{
				arr[r][c] = arr[r - 1][c - 1] + arr[r - 1][c];
			}
		}
	}
	for(r = 0;r < num;r++){
		for(c = 0;c <= r;c++){
			printf("%d ",arr[r][c]);
		}
		printf("\n");
	}
}

// 递归求解
#define SIZE 10
int Arr[SIZE][SIZE];
void triangle_yanghui0(int *(p_Arr)[SIZE],int num,int cur){
	int i,j;
	if(cur == num){
		for(i = 0;i < num;i++){
			for(j = 0;j <= i;j++){
				printf("%d",Arr[i][j]);
			}
			printf("\n");
		}
		return;
	}
	for(j = 0;j <= cur;j++){
		if(j == 0 || j == cur){
			Arr[cur][j] = 1;
		}else{
			Arr[cur][j] = Arr[cur - 1][j - 1] + Arr[cur - 1][j];
		}
	}
	triangle_yanghui0(p_Arr+1,num,cur+1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值