算法学习(一)

本文通过四个实例探讨了枚举法在C语言中的应用,包括ABCD乘法问题、阶梯问题、水果购买问题和求最长连续子序列。通过不同方案的实现,强调了优化枚举法以提高效率的重要性,并进行了反思总结。
摘要由CSDN通过智能技术生成

以下案例选自
《第一行代码 C语言》 人民邮电出版社 主编:翁惠玉
对部分案例添加了自己的代码。

通用算法设计

1.枚举法:

  1. 对可能的结果值按某种一定顺序一个一个的枚举检验
  2. 适合解的数量有限,可枚举的场合,特点是直观,但时间性能差,注意优化,提高效率。

一、ABCD x E =DCBA(A,B,C,D代表不同的数字)
分析:
1)A和D不能位0
2)因为A,B,C,D代表不同的数字,E不能位1

方案一:

#include <stdio.h>
int main()
{
   
int A,B,C,D,E,num1,num2;
for(A = 2;A <= 9; ++A){
   
	//printf(" A=%d \n",A);
	for(B = 0;B <= 1;++B){
   
		if(A == B) continue;
		//printf(" B=%d \n",B);
		for(C = 6;C <= 7;++C){
   
			if(C==A||C == B  ) continue;
			//printf(" C=%d \n",C);
			for(D = 1;D <= 9;++D){
   
				if(  D == A|| D == B || D == C) continue;
				//printf(" D=%d \n",D);
				for(E = 2;E <= 9;++E){
   
					if(E == A ||  E == B||E == C||E == D ) continue;
					//printf(" E=%d \t",E);
					num1 = A*1000+B*100+C*10+D;
					num2 = D*1000+C*100+B*10+A;
					if(num1 * E == num2)
						printf(" %d * %d =%d\n",num1,E,num2);
				}
					
			}
				
		}
			
	  }
	}
		return 0;

}

方案二(改进版):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值